我在现有的网站上介绍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安全过滤器首先出现在我的自定义过滤器之后。
如何交换?
答案 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