我正在尝试在我的 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 配置?或者您对如何调试有任何其他想法?