删除spring oauth2令牌API中的HTTP严格传输安全性(HSTS)响应头

时间:2016-10-16 14:07:15

标签: spring-security spring-oauth2 hsts

我在我的API项目中使用Spring Security和Spring Oauth2以及JWT 用于登录Spring oauth 2提供的默认API是/ oauth / token

此API始终在响应中添加“Strict-Transport-Security:max-age = 31536000; includeSubDomains”标头。 但在我的情况下,我不希望这样。我已使用以下源代码删除了HSTS。

@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        // ...
        .headers()
            .httpStrictTransportSecurity().disable();
    }
}

使用上面的代码,我定义的API将在标头中删除HSTS。但默认的API / oauth / token仍会在标头中返回HSTS。 有没有办法做到这一点? 请帮忙。

谢谢, 锡

1 个答案:

答案 0 :(得分:1)

我刚遇到同样的问题。 我找到的最佳解决方案是编写一个过滤器,以防止其他人一般设置HSTS标头。

@Component
@Order(value = Ordered.HIGHEST_PRECEDENCE)
public class HstsHeaderPreventionFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        chain.doFilter(request, new HttpServletResponseWrapper((HttpServletResponse) response) {
            public void setHeader(String name, String value) {
                if (!name.equalsIgnoreCase("Strict-Transport-Security")) {
                    super.setHeader(name, value);
                }
            }
        });
    }

    @Override
    public void destroy() {

    }

}