You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat9配置指定WAR应用强制HTTPS 其余兼容HTTP/HTTPS

配置失效原因

之前的配置无法生效核心有三点:

  • url-pattern 匹配规则不符合预期:/frontApp 仅能精准匹配路径为/frontApp的请求,无法覆盖/frontApp/index.do这类子路径资源
  • 非强制HTTPS路径缺少显式传输规则声明:仅配置web-resource-collection不添加user-data-constraint无法覆盖跳转规则,必须显式指定transport-guarantee为NONE才会放行HTTP请求
  • 未利用Tomcat安全约束的匹配优先级:Tomcat对安全约束遵循最具体路径优先的匹配逻辑,精度更高的路径规则会覆盖宽泛路径的规则,反向不成立。
正确配置步骤

1. 核对连接器基础配置

打开Tomcat安装目录下的conf/server.xml,确认HTTP连接器的redirectPort属性与HTTPS连接器的监听端口一致,参考配置如下:

<!-- HTTP连接器,默认监听80端口 -->
<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="443" /> <!-- 取值需和下方HTTPS连接器的port属性一致 -->

<!-- HTTPS连接器,默认监听443端口 -->
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="你的证书存储路径"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

此前已经配置过全量HTTPS跳转的话,这一步通常不需要修改,核对参数即可。

2. 添加安全约束规则

打开Tomcat全局配置文件conf/web.xml(如果需要规则仅对单个应用生效,可修改对应应用内WEB-INF/web.xml),在<web-app>标签末尾(所有Servlet、Filter配置之后,</web-app>闭合标签之前)添加如下规则:

<!-- frontApp 强制HTTPS访问 -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>FrontApp SSL Required</web-resource-name>
        <url-pattern>/frontApp/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<!-- backOne 允许HTTP/HTTPS双协议访问 -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>BackOne No SSL Redirect</web-resource-name>
        <url-pattern>/backOne/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<!-- backTwo 允许HTTP/HTTPS双协议访问 -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>BackTwo No SSL Redirect</web-resource-name>
        <url-pattern>/backTwo/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

如果需要除backOne、backTwo之外的所有路径都强制跳转HTTPS,可以额外在上述规则之后添加全局规则,因为路径匹配精度差异,两个back应用的规则优先级更高,不会被全局规则覆盖:

<!-- 可选:全局路径强制HTTPS -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Global SSL Required</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

注意:如果是在单个应用的WEB-INF/web.xml中配置规则,url-pattern是相对于当前应用上下文路径的,例如在frontApp自己的web.xml中配置强制HTTPS,url-pattern直接写/*即可,不需要写/frontApp/*。

3. 重启服务验证

保存配置后重启Tomcat即可生效,验证规则:

  • 访问http://example.com/frontApp/*下任意资源会自动重定向到HTTPS地址
  • 访问http://example.com/backOne/*、http://example.com/backTwo/*下的资源会正常通过HTTP响应,不会触发跳转,同时HTTPS访问这两个应用也可正常响应
常见注意事项
  • transport-guarantee共有三个可选值:NONE代表不要求加密传输,HTTP/HTTPS均可访问;CONFIDENTIAL和INTEGRAL在Tomcat中效果一致,均要求必须使用HTTPS访问,HTTP请求会触发重定向
  • 配置完成后测试前请清空浏览器缓存,此前配置全量跳转时返回的301永久重定向会被浏览器缓存,容易造成规则不生效的假象
  • 不要保留之前配置中仅写web-resource-collection、不添加user-data-constraint的无效规则,这类规则不会产生任何约束效果

内容的提问来源于stack exchange,提问作者nu_popli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:33:17