1

我在我的 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。有没有办法做到这一点?请帮忙。

谢谢,锡

4

1 回答 1

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() {

    }

}
于 2017-03-27T19:58:13.190 回答