【问题标题】:How to enumerate HTTP listeners from a Java EE web app如何从 Java EE Web 应用程序枚举 HTTP 侦听器
【发布时间】:2010-09-25 00:36:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: web-applications ssl jakarta-ee https


    【解决方案1】:

    您可以仅使用配置将它们自动传输到 https。

    在您的 web.xml 中:

    <user-data-constraint>
      <transport-guarantee>
        CONFIDENTIAL
      </transport-guarantee>
    </user-data-constraint>
    

    在 HTTPConnector 中的 server.xml 中:

    redirectPort="YOUR_SSL_PORT"
    

    【讨论】:

      【解决方案2】:

      如果您有负载均衡器,通常可以将其配置为自动执行这种重定向。

      【讨论】:

        【解决方案3】:

        如果我正确阅读了您的问题,您可以查询 ServletRequest getProtocol 以查看连接是以 HTTP 还是 HTTPS 以及什么版本进入的。作为奖励,您可以获得哪个端口。

        做出决定并重定向(或转发)到应用指定的端口。

        为了进一步澄清回答; Enabling HTTPS communication support

        【讨论】:

          猜你喜欢
          • 2016-03-08
          • 1970-01-01
          • 2012-08-30
          • 1970-01-01
          • 1970-01-01
          • 2014-04-23
          • 1970-01-01
          • 2014-01-16
          • 1970-01-01
          相关资源
          最近更新 更多