java - 当 Java 应用程序位于负载均衡器后面时,在某些 URL 上强制使用 SSL

标签 java ssl heroku https load-balancing

我有一个 Java 网络应用程序,我在其中定义了某些 URL 只能通过 HTTPS 访问 - 这是使用 web.xml 中的安全约束定义完成的,如下所示:

<security-constraint>
                <web-resource-collection>
                        <web-resource-name>SSL URLs</web-resource-name>
                        <url-pattern>/j_spring_security_check</url-pattern>
                        <url-pattern>/secure/account/create</url-pattern>
                        <url-pattern>/register</url-pattern>
                        <url-pattern>/login/*</url-pattern>
                        <url-pattern>/</url-pattern>
                        <http-method>GET</http-method>
                <http-method>POST</http-method>
                </web-resource-collection>
                <user-data-constraint>
                        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
                </user-data-constraint>
        </security-constraint>

我的问题是,当我将我的应用程序部署到 Heroku 并尝试搭载它的 SSL 连接时,我的应用程序位于负载均衡器后面,并且进入该应用程序的每个请求都是 HTTP,因此,我的 web.xml 中的上述定义。 xml 强制重定向到 SSL URL,它再次作为 HTTP 进入应用程序,因此它最终进入重定向循环,在我的浏览器中显示为错误。

我不太确定如何处理这个问题,我读过我可以查看 x-forwarded-proto,它应该告诉我原始请求是 https 还是 http,但我不知道该怎么做处理它,因为上面的安全约束将始终生效。我应该删除安全约束部分并以编程方式强制执行 https 吗?这对我来说似乎不太理想。

最佳答案

确保您的负载均衡器转发有关 SSL 的信息,然后您的应用程序应该能够识别连接已加密,即使与应用程序服务器本身的连接未加密也是如此。

关于java - 当 Java 应用程序位于负载均衡器后面时,在某些 URL 上强制使用 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13558303/

相关文章:

ssl - 谷歌 SSL 证书错误

ssl - Kubernetes TLS secret 证书过期

html - 在 "link_to"erb 标签中插入一个 HTML 元素?

java - 如何用资源链接替换 ​​Swagger 的枚举?

没有同步的Java等待/通知实现

java - 在 JDBI dropwizard 中使用自定义 where 条件

java - jhipster heroku 首次部署后无法连接到数据源

使用 Microsoft Visual Studio Code 进行 Java 编程

ruby - 如何使用最新版本的 Ruby 连接到具有无效证书的 https 服务器

SSL 与 Heroku 托管和 Gandi 域