我已将过滤器配置如下,但在Spring Security Filter链之前不会调用它。我已将顺序设置为零
我使用的是Spring Boot 1.3,它支持在过滤器上设置顺序
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new UrlRewriteFilter());
registrationBean.addUrlPatterns("*");
registrationBean.addInitParameter("confReloadCheckInterval", "5");
registrationBean.addInitParameter("logLevel", "DEBUG");
registrationBean.addInitParameter("confPath", "urlrewrite.xml");
registrationBean.setOrder(0);
return registrationBean;
}
如果您不想为应用程序中的安全过滤器链选择任意顺序。属性文件中,可以使用SecurityProperty设置顺序。默认的FILTER\u顺序值。这是安全过滤器链使用的值,因为它没有显式设置顺序值。
@Bean
public FilterRegistrationBean<MyFilter> myFilterRegistration() {
FilterRegistrationBean<MyFilter> regBean= new FilterRegistrationBean<>();
regBean.setFilter(new MyFilter());
regBean.addUrlPatterns("/*");
// Invoke MyFilter before the security filter chain
regBean.setOrder(SecurityProperties.DEFAULT_FILTER_ORDER - 1);
return regBean;
}
我发现在SpringBoot 2.0中实现这一点的最好方法是在Spring Security配置中使用addFilterBefore。我选择在用户名密码过滤器之前执行此操作,因为我的过滤器是另一个登录过滤器
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(new UrlRewriteFilter(), UsernamePasswordAuthenticationFilter.class)
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS, "/*/**").permitAll()
.antMatchers("/api/login").permitAll()
.antMatchers("/api/**").access("hasRole('ROLE_ADMIN')");
}
}
应用程序.属性
security.filter-order=5
//>spring 2.1.3
spring.security.filter-order=5
这些属性不时变化,可以在这里找到
https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#actuator-属性
我自己还没有这样做,但是看一下代码,您似乎只需要按照安全过滤器的顺序设置一个属性。例如在application.properties
这应该在安全过滤器之前排序过滤器。我不知道更改这个顺序会带来什么影响,就安全性而言,这对我来说有点风险。Spring开发人员对此进行了讨论。最终他们实现了我上面的答案。
讨论
https://github.com/spring-projects/spring-boot/issues/1640
测试显示此属性的作用。(搜索testCustomFilterorder())
https://github.com/spring-projects/spring-boot/blob/1.2.x/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/SecurityAutoConfigurationTests.java
我将在一个已经存在的网站中介绍Spring Web Security。现在出现了一个问题: 我希望我的自定义筛选器在Spring Security筛选器链之前在Tomcat筛选器链中执行。我不想让他们成为这个Spring安全过滤器链的一部分。 我所找到的只是Spring Boot中的一个解决方案(请参见“Spring-How to insert a filter before SpringSecu
我想设置一个推荐人cookie,因为我需要排除一些页面(例如错误、登录、注销等)要在登录后重定向到上次调用但未被排除的页面,请执行以下操作: 但是Spring Security过滤链在CookiierReferrerFilter之前就被触发了。因此,调用安全页面将立即将我重定向到登录页面,而无需调用之前,没有设置cookie。 有一个类配置WebApp(设置配置类、映射、过滤器),它扩展了: 还有
启用Spring Security调试后,它会注册Spring Security DebugFilter.java 我有一个自定义过滤器,我想在spring security DebugFilter之前订购。在调试过滤器之前调用过滤器最合适的方式是什么? 我的自定义过滤器已经是Spring Security过滤器链之前的订单,但它不会在Spring Security调试过滤器之前被调用。
当我调用我的服务时,我的这个URL: 我有这个堆栈跟踪: 什么是平均健康有一个空的筛选器列表?
主要内容:FilterChain 接口,Filter 链的拦截过程,Filter 链中 Filter 的执行顺序,示例在 Web 应用中,可以部署多个 Filter,若这些 Filter 都拦截同一目标资源,则它们就组成了一个 Filter 链(也称过滤器链)。过滤器链中的每个过滤器负责特定的操作和任务,客户端的请求在这些过滤器之间传递,直到传递给目标资源。 FilterChain 接口 javax.servlet 包中提供了一个 FilterChain 接口,该接口由容器实现。容器将其实例对象
我正在使用这个环境: Spring 4.0.5 Spring security 3.2.4 在我的环境中,我有一个SSO系统,我需要在这个系统中集成我的web应用程序。这个系统是私人产品。SSO机制的最终结果是在请求头中放置一个参数。所以我在申请中应该做的是: null 此场景类似于CAS集成场景;所以我从CAS集成着手;我写了我的自定义过滤器,我写了我的自定义入口点和处理请求所需的所有其他类,但