spring-security - 在 Spring Security 过滤器链之前执行 servlet 过滤器

标签 spring-security servlet-filters

我正在一个现有的网站中引入 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/

相关文章:

java - 如何从 HttpServlet 关闭 HTTP 连接

java - web.xml中如何通过URL传递参数?

java - DispatcherServlet 中的 PageNotFound : No mapping found for HTTP request with URI [. ./j_spring_security_check]

spring-security - 使用 MockMVC 集成测试 Spring Boot

spring - 拦截器或过滤器

java - 如何记录在 servlet 过滤器中调用的托管 bean 名称和操作方法

java - Jersey 2 状态代码在 HttpServletResponseWrapper 中不可见

java - Spring安全单点登录

java - 在 spring security login-processing-url (/j_spring_security_check) 之前做过滤 Action

java - SpringSecurity - 自定义自动认证