1

我正在尝试在我的 Spring Boot 应用程序中启用 HSTS。我已将以下内容添加到我的 WebSecurityConfig 中(基于Enable HTTP Strict Transport Security (HSTS) with spring boot application):

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
{
    protected void configure(HttpSecurity http) throws Exception
    {
        // Other http configurations, e.g. authorizeRequests and CSRF
        // ...

        http.headers().httpStrictTransportSecurity()
            .maxAgeInSeconds(Duration.ofDays(365L).getSeconds())
            .includeSubDomains(true);
    }
}

在 HTTPS 请求中,我确实得到了strict-transport-security标头,但 max-age 始终是0

strict-transport-security: max-age=0; includeSubDomains

如果我不添加 Spring 配置,我会得到完全相同的标题,所以看起来我的配置没有被拾取。它似乎特定于 HSTS 配置,因为其他配置(例如http.authorizeRequests())正在工作。这似乎表明 HSTS 配置以某种方式被覆盖,尤其是考虑到Spring 的默认max-age 为一年时。但是,我已经能够在我们的代码库中找到任何其他与 HSTS 相关的配置。

我还尝试设置断点o.springframework.s.c.a.w.c.HeadersConfigurer.HstsConfig#maxAgeInSeconds以检查它是否被多次调用。我的电话configure是唯一的调用。

有谁知道为什么不使用我的 HSTS 配置?或者您对如何调试有任何其他想法?

4

1 回答 1

0

事实证明,这是由 Cloudflare 配置引起的,该配置重写了标头并将 max-age 设置为 0。

更新 Cloudflare 配置也比更新每个微服务中的配置更容易。

于 2019-07-10T02:08:55.977 回答