发布一个 Spring(不是引导)应用程序 运行 HTTPS

Release a Spring (not boot) application running with HTTPS

我尝试使用在 GitHub 上找到的 Spring application 与 Azure B2C 建立 SAML 连接。 在我 运行 在本地之前,一切都很好,但是当我需要在生产环境中测试这个应用程序时,我发现自己遇到了由于 HTTPS 连接引起的问题。

我的生产环境基于 AWS,我 运行 在反向代理中配置了一个 ECS 任务。我正在使用带有 HTTPS 侦听器和 HTTP 规则的负载平衡器以在 HTTPS 上重定向。

此应用程序基于 Spring,(不是 Spring 引导)并构建了一个 WAR 文件,我 运行 在 Tomcat 7.

当我尝试登录时,此应用程序尝试将 ALB 重定向到 HTTPS 的 HTTP 请求,但此重定向使我的 SAML 工作流程无效。

我尝试将 requires-channel="https" 添加到我的 securityContext.xml 中的任何 <security:intercept-url /> 节点,但是当我尝试在线访问该应用程序时,我得到了一个 ERR_TOO_MANY_REDIRECTS

我需要配置 tomcat 并且此应用程序仅请求 HTTPS 而无需任何重定向,但我现在不知道如何

我最终分两步找到了解决方案。

第一步: 我将 Tomcat 配置修改为仅适用于 https。

在 server.xml 中,我添加了一个连接器以使用 TLS

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" 
           maxThreads="150" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           keystoreFile="conf/keystore.keystore"
           keystoreType="JKS"
           keystorePass="myStorePass"
           keyPass="myPass" />

然后我删除了 8080 到 443 的重定向。找到带有 protocol="HTTP/1.1" 的节点连接器并将其删除。

第二步: 我将负载均衡器修改为仅在具有 443 端口的 HTTS 中工作。为此,我必须在我的集群上创建一个新的目标组和一个新的服务。