我正在为我的应用程序使用Spring Boot。由于特殊需要,我有自己的 Servlet 类,它扩展自Spring DispatcherServlet 。 (而且我很确定我不会成为第一个这样做的人。)
在我尝试添加身份验证/授权之前,一切正常。我设置了身份验证/授权,如下所示:
https://github.com/spring-projects/spring-data-examples/tree/master/rest/security
我在REST控制器方法上使用 @PreAuthorize 注释来根据GET / POST等操作类型限制访问。
我收到错误:"当我尝试POST某些东西时,在SecurityContextHolder" 中找不到AuthenticationObject。我接下来做的是比较我的应用程序和一个有效的Spring Boot Security示例(如上例所示),逐步查看发生了什么。我发现在工作示例中,在调用DispatcherServlet的 doService 方法之前,BasicAuthenticationFilter等过滤器会出现在图片中。我没有看到在我的应用程序中调用这些过滤器。
由于未调用过滤器,我在应用程序中根本看不到请求对象中的用户信息或session-id。我确实在工作示例中看到了这一点。此外,我看到在工作示例中,请求和响应对象被包装在过滤器的 SecurityContextHolder 包装器中。由于过滤器不会在我的应用程序中被调用,因此请求/响应对象永远不会被包装。我怀疑上述错误与此有关。
我想因为我有自己的Servlet类来扩展Spring Servlet,所以它实质上是对Spring说我将从那里获得控制权。这也意味着我必须做一切通常Spring为我做的事情。
我的问题是:
在Spring Boot的什么时候调用过滤器以及如何实现 这个在我的应用程序之前请求到达我的自定义Servlet?
我是否必须将它们作为Beans注入我的主课程?并以什么顺序 他们应该被援引吗?
再次感谢,