【问题标题】:Tomcat: how to get the secure port number in Java?Tomcat:如何在 Java 中获取安全端口号?
【发布时间】:2009-08-05 15:05:38
【问题描述】:

我想在我的一个不安全页面中嵌入指向我的应用程序安全页面的链接。 安全的 tomcat 端口在 server.xml 文件中配置。在某些部署中,它是 443、8443 等。 所以我需要一种从tomcat配置中读取安全端口以在链接中使用它的方法。这可能吗?

或者,简单地访问 server.xml 配置(从请求的上下文中)并自己解析它以找出端口号也是可以接受的,但不太需要。

我意识到可能有多个连接器和几个安全连接器,因此我将由我的程序逻辑来决定选择哪一个。问题是 - 我如何获得这些信息?

谢谢!

【问题讨论】:

    标签: java tomcat https


    【解决方案1】:

    我很确定没有相应的 API。您可能可以通过 web.xml 中的 servlet environ 参数对其进行配置。明显的缺点是您现在有 2 个位置配置了 SSL 端口号。

    另一种方法是在 web.xml iirc 中配置安全性,例如

     <security-constraint>
        <web-resource-collection> 
            <web-resource-name>MyLoginPage</web-resource-name>
            <url-pattern>/login</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>
    

    您可以只使用登录页面的普通链接,并且 tomcat 应该自动将 redicts 发送到 ssl 连接器,无论配置到哪个端口。

    【讨论】:

    • 我认为安全约束配置是强制页面使用ssl的最佳方式。如果我们不使用安全约束强制页面使用 ssl,用户将能够用 http 替换 https 协议并在没有 ssl 的情况下使用它。
    【解决方案2】:

    最简单的解决方案可能是在servlet 的init() 方法中搜索server.xml 文件,对其进行解析并将端口号存储在某处。 servlet 应该是自动加载的。

    另一种选择是将此代码放入您的构建脚本中,并在构建时将值复制到web.xml 文件中。但这意味着您必须在本地安装相同的 Tomcat,或者您必须可以远程访问 server.xml 文件。

    我更喜欢第一种解决方案,因为您可以让 servlet 提前失败,并且如果无法确定端口,webapp 将不会出现。这样,您以后就不会在某个未指定的时间出现神秘错误,并且您不会在每次请求期间浪费时间(如果不重新启动 Tomcat,端口号将无法更改)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      相关资源
      最近更新 更多