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

时间:2016-11-18 09:54:57

标签: spring-security servlet-filters

我在现有的网站上介绍Spring Web Security。现在出现了一个问题:

我希望我的自定义过滤器在Spring Security过滤器链的之前的中执行。我不希望它们成为Spring Security过滤器链的一部分。

我发现的所有内容都是Spring Boot的解决方案(参见"Spring - How to insert a filter before SpringSecurityFilterChain") - 但我没有使用Spring Boot。


更新22.11.2016:

以下是我created的一部分 - 此处仅添加了自定义过滤器:

web.xml

通过定义AbstractSecurityWebApplicationInitializer添加Spring Security过滤器链:

<filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>


结果:Spring安全过滤器首先出现在我的自定义过滤器之后。

如何交换?

2 个答案:

答案 0 :(得分:2)

如果在springSecurity Filter声明之前在web.xml中定义了Web安全过滤器,则此过滤器将不会成为spring安全过滤器链的一部分,并且您的过滤器将在spring安全过滤器链之前执行。

或者,如果您希望过滤器在Web服务器级别执行,您可以在conf / web目录中定义tomcat web.xml中的过滤器。此过滤器将在您的应用程序过滤器链之前执行。 但是这个过滤器将在你的tomcat下为所有web应用程序运行时执行。

请注意,您还需要将过滤器类用于所有Web应用程序,可能将其放在Tomcat的lib /目录中。

答案 1 :(得分:-1)

Spring安全性提供的功能很少,无法在之前或之后添加过滤器:

@Configuration
public class CustomWebSecurityConfigurerAdapter
  extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.addFilterAfter(
          new CustomFilter(), BasicAuthenticationFilter.class);
    }
}

您可以参考此页面:http://www.baeldung.com/spring-security-custom-filter