发布使用 HTTPS 运行的 Spring(非引导)应用程序
Posted
技术标签:
【中文标题】发布使用 HTTPS 运行的 Spring(非引导)应用程序【英文标题】:Release a Spring (not boot) application running with HTTPS 【发布时间】:2022-01-17 06:07:48 【问题描述】:我尝试使用 GitHub 上的 Spring application 与 Azure B2C 建立 SAML 连接。 一切正常,直到我在本地运行,但是当我需要在生产环境中测试这个应用程序时,我发现自己遇到了由于 HTTPS 连接而出现的问题。
我的生产环境基于 AWS,我正在运行在反向代理中配置的 ECS 任务。我正在使用带有 HTTPS 侦听器和 HTTP 规则的负载均衡器在 HTTPS 上重定向。
此应用程序基于 Spring(不是 Spring Boot)并构建了一个我在 Tomcat 7 上运行的 WAR 文件。
当我尝试登录时,此应用程序尝试 ALB 重定向到 HTTPS 的 HTTP 请求,但此重定向使我的 SAML 工作流程无效。
我尝试将requires-channel="https"
添加到我的securityContext.xml 中的任何<security:intercept-url />
节点,但是当我尝试在线访问应用程序时,我得到了一个ERR_TOO_MANY_REDIRECTS
我需要将 tomcat 和此应用程序配置为仅请求 HTTPS 而无需任何重定向,但我现在不知道如何
【问题讨论】:
【参考方案1】:我最终分两步找到了解决方案。
第一步:我将我的 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 中工作。为此,我必须在集群上创建一个新目标组和一个新服务。
【讨论】:
以上是关于发布使用 HTTPS 运行的 Spring(非引导)应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Amazon EMR + mrjob:引导错误,“引导操作 1 返回非零返回码”
获取非 Spring Java 应用的详细 Metrics 数据
Tomcat中部署的Spring引导应用程序中的@ExceptionHandler没有返回@ResponseBody
从 Node Js 重定向到 Spring 引导服务并发送回响应