在引导中的spring安全过滤器链之前调用过滤器

时间:2015-12-11 18:00:51

标签: spring-boot

我已按如下方式配置了我的过滤器,但在Spring Security Filter链之前没有调用它。我已将订单设为零

我使用支持过滤器设置顺序的Spring Boot 1.3

from itertools import combinations

def triangles(g):
    result = [0] * g.vcount()
    adjlist = [set(neis) for neis in g.get_adjlist()]
    for vertex, neis in enumerate(adjlist):
        for nei1, nei2 in combinations(neis, 2):
            if nei1 in adjlist[nei2]:
                result[vertex] += 1
    return result

2 个答案:

答案 0 :(得分:8)

<强> application.properties

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

答案 1 :(得分:0)

我发现在SpringBoot 2.0中做到这一点的最好方法是在您的Spring Security Configuration中使用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')");
    }
}