我有一个带有基于Web的配置UI的Web应用程序。如果用户通过HTTP访问,我想提醒用户他们应该真正使用HTTPS,并为他们提供一个链接,点击以获取以HTTPS为前缀的URL。
现在,如果我们在默认端口上,这是非常简单的,但通常情况下,我们不是 - 例如,HTTP可能在8080上,HTTPS在8181上。我可以有一些启发式来确定哪个端口使用,例如80-> 443,8080-> 8181,但有没有办法从Web容器中获取端口和协议列表?理想情况下是Java EE标准,但即使是特定容器也是一个开始......
编辑 - 一个澄清 - 这是一个'现成的'应用程序(OpenSSO),所以我真的希望能够(a)让用户选择继续如果他们真的想要使用不安全的端口(例如他们在没有安全端口的情况下在他们的笔记本电脑上部署)和(b)不让用户编辑server.xml。答案 0 :(得分:1)
您可以使用仅配置自动将它们传输到https。
在你的web.xml中:
<user-data-constraint>
<transport-guarantee>
CONFIDENTIAL
</transport-guarantee>
</user-data-constraint>
并在HTTPConnector的server.xml中:
redirectPort="YOUR_SSL_PORT"
答案 1 :(得分:0)
如果您有负载均衡器,通常可以将其配置为自动执行这种重定向。
答案 2 :(得分:0)
如果我正确地阅读了您的问题,您可以查询ServletRequest getProtocol以查看连接是以HTTP还是HTTPS进行连接以及版本是什么。作为奖励,您可以获得哪个端口。
做出决定并重定向(或转发)到app指定的端口。
进一步澄清回答; Enabling HTTPS communication support