我有一个Java Web应用程序,我已经定义了某些URL只能通过HTTPS访问 - 这是使用web.xml中的security-constraint定义完成的,如下所示:
<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,因此,我的网络中的上述定义。 xml强制重定向到SSL URL,它再次作为HTTP进入应用程序,因此它最终出现在重定向循环中,在浏览器中显示为错误。
我不确定如何处理这个,我已经读过我可以看看x-forwarded-proto,它应该告诉我原始请求是https还是http,但我不知道该怎么做使用它,因为上面的安全约束将始终启动。我应该删除安全约束部分并以编程方式强制执行https吗?这对我来说似乎并不理想。
答案 0 :(得分:0)
确保您的负载均衡器转发有关SSL的信息,然后您的应用程序应该能够识别连接已加密,即使与应用程序服务器本身的连接不是。