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

发布HTTPS环境运行的非Spring Boot应用 解决重定向过多问题

问题根因

无限重定向和SAML流失效的核心原因是SSL卸载在ALB层完成:ALB监听443端口接收HTTPS请求后,会通过HTTP协议转发给后端ECS上的Tomcat,Tomcat和Spring Security默认无法感知前端代理的HTTPS协议,会把收到的请求判定为HTTP请求,触发requires-channel="https"的重定向逻辑,再次跳转到HTTPS地址,请求回到ALB后又被转成HTTP发给Tomcat,形成死循环。同时SAML协议对请求地址、回调地址的协议一致性校验非常严格,中间多一次重定向就会打断状态校验导致登录失败。

具体配置步骤

1. 配置Tomcat 7识别代理转发的协议头

编辑Tomcat目录下的conf/server.xml,在你部署应用对应的<Host>节点内添加RemoteIpValve配置,让Tomcat解析ALB转发时携带的X-Forwarded-*头,正确识别原始请求的真实协议和IP:

<Valve className="org.apache.catalina.valves.RemoteIpValve"
       remoteIpHeader="X-Forwarded-For"
       protocolHeader="X-Forwarded-Proto"
       protocolHeaderHttpsValue="https"
       internalProxies=".*"/>
  • 配置验证通过后,建议把internalProxies的值替换为你AWS VPC的内网网段正则,避免外部请求伪造代理头带来安全风险。

2. 调整Tomcat HTTP连接器配置

找到server.xml中Tomcat监听服务端口的<Connector>节点(默认监听8080的HTTP连接器),添加scheme、secure和proxyPort配置,让Tomcat拼接回调、重定向地址时使用正确的HTTPS协议和443端口:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           scheme="https"
           secure="true"
           proxyPort="443"/>

3. 修正Spring Security SAML的基础地址配置

打开securityContext.xml,找到SAML的MetadataGenerator bean配置,显式指定生产环境的HTTPS实体基地址,避免SAML元数据、认证请求里生成HTTP前缀的回调地址:

<bean class="org.springframework.security.saml.metadata.MetadataGenerator">
    <!-- 替换为你生产环境实际的HTTPS域名加应用上下文路径 -->
    <property name="entityBaseURL" value="https://你的生产域名/应用上下文路径"/>
</bean>

之前添加的requires-channel="https"配置可以保留,配置完上述参数后不会再触发重定向循环。

4. 验证流程

重启Tomcat后按以下顺序验证:

  • 直接访问生产HTTPS域名,确认页面正常加载,无ERR_TOO_MANY_REDIRECTS错误
  • 触发登录操作,抓包检查跳转到Azure B2C的认证请求中,Assertion Consumer Service回调地址为HTTPS前缀
  • 完成Azure B2C侧认证跳转回应用时,确认无SAML签名、地址不匹配类报错,可正常完成登录

注意:ALB上配置的HTTP自动跳HTTPS规则不需要删除,该规则只对直接访问80端口的外部用户生效,上述配置完成后Tomcat内部不会再触发协议重定向,不会形成循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.22 16:12:26