我正在一个现有的网站中引入 Spring Web Security。现在出现了一个问题:
我希望我的自定义过滤器在 Tomcat 过滤器链中在 Spring Security 过滤器链中执行。我不希望它们成为 Spring Security 过滤器链的一部分。
我找到的只是 Spring Boot 中的解决方案(请参阅 "Spring - How to insert a filter before SpringSecurityFilterChain" ) - 但我没有使用 Spring Boot。
2016年11月22日更新:
这是我的 web.xml
的一部分 - 此处仅添加自定义过滤器:
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
Spring Security过滤器链是通过定义AbstractSecurityWebApplicationInitializer来添加的:
public class MySecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
...
}
结果:Spring 安全过滤器首先并且仅在我的自定义过滤器之后。
如何交换这个?
最佳答案
如果您在 springSecurity Filter 声明之前在 web.xml 中定义了 Web Security 过滤器,则该过滤器将不会成为 Spring Security 过滤器链的一部分,并且您的过滤器将在 Spring Security 过滤器链之前执行。
或者,如果您希望过滤器在Web服务器级别执行,您可以在tomcat web.xml中定义过滤器,该文件位于conf/目录中。该过滤器将在您的应用程序过滤器链之前执行。 但此过滤器将对 Tomcat 下的所有 Web 应用程序运行时执行。
请注意,您还需要使过滤器类可用于所有 Web 应用程序,可能是将其放在 Tomcat 的 lib/目录中。
关于spring-security - 在 Spring Security 过滤器链之前执行 servlet 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40674014/