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

时间:2009-08-05 15:05:39

标签: java tomcat https

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:3)

我很确定没有API。您可以通过web.xml中的servlet environ参数来保持它的可配置性。显而易见的缺点是,您现在有2个位置配置了SSL端口号。

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

 <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应自动将重拨发送到ssl连接器,无论配置为哪个端口。

答案 1 :(得分:1)

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

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

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