如何从Java EE Web应用程序枚举HTTP侦听器

时间:2008-12-02 20:49:05

标签: web-applications ssl java-ee https

我有一个带有基于Web的配置UI的Web应用程序。如果用户通过HTTP访问,我想提醒用户他们应该真正使用HTTPS,并为他们提供一个链接,点击以获取以HTTPS为前缀的URL。

现在,如果我们在默认端口上,这是非常简单的,但通常情况下,我们不是 - 例如,HTTP可能在8080上,HTTPS在8181上。我可以有一些启发式来确定哪个端口使用,例如80-> 443,8080-> 8181,但有没有办法从Web容器中获取端口和协议列表?理想情况下是Java EE标准,但即使是特定容器也是一个开始......

编辑 - 一个澄清 - 这是一个'现成的'应用程序(OpenSSO),所以我真的希望能够(a)让用户选择继续如果他们真的想要使用不安全的端口(例如他们在没有安全端口的情况下在他们的笔记本电脑上部署)和(b)不让用户编辑server.xml。

3 个答案:

答案 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