Spring boot 在启动中的spring安全过滤器链之前调用过滤器
我已经按照下面的方式配置了我的过滤器,但在Spring安全过滤器链之前它不会被调用。我已将顺序设置为零 我使用的是SpringBoot1.3,它支持设置过滤器的顺序Spring boot 在启动中的spring安全过滤器链之前调用过滤器,spring-boot,Spring Boot,我已经按照下面的方式配置了我的过滤器,但在Spring安全过滤器链之前它不会被调用。我已将顺序设置为零 我使用的是SpringBoot1.3,它支持设置过滤器的顺序 @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter
@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;
}
应用程序属性
security.filter-order=5
//>spring 2.1.3
spring.security.filter-order=5
这些属性会不时发生变化,可以在此处找到
我自己并没有这样做,但看看代码,似乎您只需要为安全过滤器的顺序设置一个属性。例如,在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
在SpringBoot 2.0中,我发现最好的方法是使用addFilterBefore进行Spring安全配置。我选择在用户名密码筛选器之前执行此操作,因为我的筛选器是另一个登录筛选器
@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')");
}
}
感谢Zergleb提供解决方案。在application.properties中添加“security.filter order=5”做了一些小动作,请注意,在Spring Boot 2.1.3中,属性是:Spring.security.filter.order=5