按路由配置Spring Security标头()

时间:2017-07-05 08:20:50

标签: spring-security

弹簧安全性是否可以为不同的路线匹配器设置不同的header().contentSecurityPolicy("...")设置?

我目前正在使用以下spring安全配置:

@Configuration
@EnableWebSecurity
public static class MyWebSecurityConfigurerAdapter extends  WebSecurityConfigurerAdapter {
    @Override
    protected final void configure(HttpSecurity httpSecurity) throws Exception     {
        httpSecurity.csrf().disable()
                .rememberMe().disable()
                .headers()
                .cacheControl().disable()
                .referrerPolicy().and()
                .contentSecurityPolicy("default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'").
// followed by .authorizeRequests() section

Chrome(https://bugs.chromium.org/p/chromium/issues/detail?id=271452)中存在一个错误或至少未指明的行为,如果资源是使用带有严格object-src策略的CSP-Header提供的,则会阻止浏览器显示PDF文档。

为了避免这种行为,我想为不同的路由匹配器提供不同的contentSecurityPolicy()配置(在这种情况下,一个用于“../*.pdf”(或者更好的是匹配响应的匹配器)内容类型)和所有其他请求的另一个)。

1 个答案:

答案 0 :(得分:0)

此代码将为两个不同的URL创建两个安全过滤器。每个人都有自己的内容安全政策:

@Configuration
@Order(1)
class PatterWebSecurityConfigurer : WebSecurityConfigurerAdapter() {
    override fun configure(http: HttpSecurity) {
        http
            .antMatcher("/pattern")
            .headers().contentSecurityPolicy("directives")
    }
}

@Configuration
@Order(2)
class OtherPatternWebSecurityConfigurer : WebSecurityConfigurerAdapter() {
    override fun configure(http: HttpSecurity) {
        http
            .antMatcher("/otherPattern")
            .headers().contentSecurityPolicy("other directives")
    }
}