这是我见过的最奇怪的tomcat配置问题。我在web.xml中有以下条目:
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<async-supported>true</async-supported>
<hstsEnabled>true</hstsEnabled>
<hstsMaxAgeSeconds>631</hstsMaxAgeSeconds>
<hstsIncludeSubDomains>true</hstsIncludeSubDomains>
<hstsPreload>true</hstsPreload>
</filter>
我故意将max-age的值设置为一个怪异值,以便可以轻松查看配置是否处于活动状态。
它已被激活:
<filter-mapping>
<filter-name>httpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
但是它没有做应该做的事情。结果头始终为:
strict-transport-security: max-age=0
这几乎就是我所不想要的。
对此有何想法?我什至无法理解这种情况如何发生,而且肯定与所有文档背道而驰。 Tomcat 9.0.29和JDK 13都是这样。看起来它应该“可以正常工作”,并且看起来很简单。
要清楚,这是在Tomcat web.xml中(在$ CATALINA / conf / web.xml中),而不是在特定于应用程序的web.xml中。 HSTS预加载适用于整个域(包括可能在其他服务器上的子域),而不适用于域内的任何URI集,因此仅在服务器范围的web.xml中设置预加载是有意义的。
编辑:这与Spring Boot应用程序一起使用。看来Spring Boot可能正在控制此标头并覆盖web.xml中设置的任何内容。这是不幸的,因为Spring Boot是在特定上下文中用于特定应用程序的,而此标头实际上适用于整个域甚至子域,因此在特定上下文中不适用于任何特定的Web应用程序。我想我需要弄清楚如何使Spring Boot对HSTS头不执行任何操作,并让Tomcat处理所有这些事情。