Spring security Spring引导和Servlet过滤器调用

Spring security Spring引导和Servlet过滤器调用,spring-security,spring-boot,spring-data,Spring Security,Spring Boot,Spring Data,我正在为我的应用程序使用Spring Boot。由于特殊需要,我有自己的Servlet类,该类从SpringDispatcherServlet扩展而来。(我非常肯定,我不会是第一个这样做的人。) 在我尝试添加身份验证/授权之前,一切正常。我设置了身份验证/授权,如下所示: 我在REST控制器方法上使用@PreAuthorize注释,根据操作类型(如GET/POST)限制访问 当我尝试发布某些内容时,出现错误:“在SecurityContextHolder中找不到AuthenticationOb

我正在为我的应用程序使用Spring Boot。由于特殊需要,我有自己的Servlet类,该类从SpringDispatcherServlet扩展而来。(我非常肯定,我不会是第一个这样做的人。)

在我尝试添加身份验证/授权之前,一切正常。我设置了身份验证/授权,如下所示:

我在REST控制器方法上使用@PreAuthorize注释,根据操作类型(如GET/POST)限制访问

当我尝试发布某些内容时,出现错误:“在SecurityContextHolder中找不到AuthenticationObject”。接下来我做的是比较我的应用程序和一个正在工作的Spring引导安全示例(如上面的示例所示),通过单步查看它发生了什么。我发现在工作示例中,在调用DispatcherServlet的doService方法之前,诸如BasicAuthenticationFilter和其他过滤器就出现了。我没有看到这些过滤器在我的应用程序中被调用

由于没有调用过滤器,我在应用程序中根本看不到请求对象中的用户信息或会话id。不过,我在工作示例中确实看到了这一点。此外,我看到在工作示例中,请求和响应对象被包装在过滤器的SecurityContextHolder包装器中。因为过滤器在我的应用程序中没有被调用,所以请求/响应对象永远不会被包装。我怀疑上述错误与此有关

我想,既然我有自己的Servlet类来扩展SpringServlet,本质上就是对Spring说,我将从那里获得控制权。这也意味着我将不得不做Spring通常为我做的一切

我的问题是:

  • 在SpringBoot中,过滤器在什么时候被调用?我如何实现 在请求到达我的自定义Servlet之前,是否在我的应用程序中执行此操作

  • 我必须将它们作为bean注入到我的主类中吗?按什么顺序 是否应该调用它们


再次感谢,

出于好奇-是什么需要让您扩展DispatcherServlet?Spring的构建方式很可能不需要这样做。