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

Tomcat:如何在Java中获取安全端口号?,java,tomcat,https,Java,Tomcat,Https,我想在我的一个不安全页面中嵌入一个指向我的应用程序的安全页面的链接。 安全tomcat端口在server.xml文件中配置。在一些部署中是4438443等。 所以我需要的是一种从tomcat配置中读取安全端口的方法,以便在链接中使用它。可能吗 或者,简单地访问server.xml配置(从请求的上下文中)并自己解析它以确定端口号也是可以接受的,但不太理想 我意识到可能有几个连接器和几个安全的连接器,所以我将让程序的逻辑来决定选择哪一个。问题是-我如何获得这些信息 谢谢 最简单的解决方案可能是在se

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

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

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


谢谢

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

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


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

我很确定没有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>

MyLoginPage
/登录
得到
邮递
保密的

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

我认为安全约束配置是强制页面使用ssl的最佳方式。如果我们不使用安全约束强制页面使用ssl,那么用户将能够用http替换https协议,并在不使用ssl的情况下使用它。