HttpHeaderSecurityFilter被奇怪地忽略了-它总是将max-age设置为0并忽略所有参数

时间:2019-12-10 04:58:33

标签: hsts

这是我见过的最奇怪的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处理所有这些事情。

0 个答案:

没有答案