我已经配置了我的过滤器,但是在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;
}
Run Code Online (Sandbox Code Playgroud)
application.properties
security.filter-order=5
Run Code Online (Sandbox Code Playgroud)
我自己没有这样做,但看看它出现的代码你只需要为安全过滤器的顺序设置属性.例如,在application.properties中
这应该在安全过滤器之前订购过滤器.我不知道改变这个顺序的含义是什么,就安全性而言,它对我来说有点风险.Spring开发人员之间就此进行了讨论.它最终实现了我的答案.
讨论
测试显示此属性的作用.(搜索testCustomFilterOrder())
我发现在 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')");
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不想在application.properties文件中为安全过滤器链选择任意顺序,则可以使用SecurityProperties.DEFAULT_FILTER_ORDER值设置顺序。这是安全过滤器链使用的值,因为它没有显式设置顺序值。
@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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4160 次 |
最近记录: |