代码之家  ›  专栏  ›  技术社区  ›  Ran

Tomcat:如何在Java中获得安全端口号?

  •  3
  • Ran  · 技术社区  · 15 年前

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

    或者,只需访问server.xml配置(在请求的上下文中),并自己对其进行分析,以确定端口号也是可以接受的,但不太理想。

    我意识到可能有几个连接器,还有几个安全的连接器,所以我将把它留给程序的逻辑来决定选择哪个连接器。问题是-我该如何获得这些信息?

    谢谢!

    2 回复  |  直到 15 年前
        1
  •  3
  •   nos    15 年前

    我很确定没有API。您可以通过web.xml中的servlet环境参数来配置它。明显的缺点是,您现在有两个地方配置了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就会自动将reducts发送到ssl连接器,无论配置到哪个端口。

        2
  •  1
  •   Aaron Digulla    15 年前

    最简单的解决方案可能是在 init() servlet的方法,分析它并将端口号存储在某个地方。servlet应该自动加载。

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

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