Spring boot 在启动中的spring安全过滤器链之前调用过滤器

Spring boot 在启动中的spring安全过滤器链之前调用过滤器,spring-boot,Spring Boot,我已经按照下面的方式配置了我的过滤器,但在Spring安全过滤器链之前它不会被调用。我已将顺序设置为零 我使用的是SpringBoot1.3,它支持设置过滤器的顺序 @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter

我已经按照下面的方式配置了我的过滤器,但在Spring安全过滤器链之前它不会被调用。我已将顺序设置为零

我使用的是SpringBoot1.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;
}

应用程序属性

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