将 HSTS 功能添加到 Tomcat

2022-09-04 23:58:10

好好相信你们。

我的Web应用程序在tomcat 6.0.43上运行,并且不使用apache或nginx。

我已经使用以下命令将我的网络从http重定向到https强制执行:

  1. 网址重定向到 ../webapps/ROOT/index.jsp

<% response.sendRedirect("https://www.epi.com.my/portal/"); %>

  1. ../webapps/myapp/WEB-INF/web.xml
<security-constraint>
<web-resource-collection>
  <web-resource-name>Protected Context</web-resource-name>
     <url-pattern>/*</url-pattern>
 </web-resource-collection>
 <user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint></security-constraint>

在下面添加此类代码的位置

标头添加严格传输安全“最大年龄 = 15768000”

还是雄猫没有这个功能?或者我需要在我的每个java Web应用程序控制器中进行修改。


答案 1

如果您能够使用Tomcat 7或8,则可以激活内置的HSTS过滤器。取消注释筛选器定义httpHeaderSecuritytomcat/conf/web.xml

<filter>
    <filter-name>httpHeaderSecurity</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <async-supported>true</async-supported>
</filter>

并添加一个有用的最大年龄参数:

<init-param>
    <param-name>hstsMaxAgeSeconds</param-name>
    <param-value>31536000</param-value>
</init-param>

不要忘记取消注释筛选器映射:

<filter-mapping>
    <filter-name>httpHeaderSecurity</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

答案 2

您可以使用过滤器添加它。将以下代码段添加到 web.xml:

<filter>
    <filter-name>HSTSFilter</filter-name>
    <filter-class>security.HSTSFilter</filter-class>
</filter>

然后在 Web 应用中创建一个筛选器:

package security;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

public class HSTSFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res,
        FilterChain chain) throws IOException, ServletException {
        HttpServletResponse resp = (HttpServletResponse) res;

        if (req.isSecure())
            resp.setHeader("Strict-Transport-Security", "max-age=31622400; includeSubDomains");

        chain.doFilter(req, resp);
    }
}

也可以使用全局web.xml(conf/web.xml)添加过滤器。