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

3
我想在我的非安全页面中嵌入到我的应用程序的安全页面链接。 安全的Tomcat端口在server.xml文件中进行配置。在某些部署中,它是443、8443等。因此,我需要一种方法从Tomcat配置中读取安全端口并在链接中使用它。这是否可能?另外,仅仅获得对server.xml配置的访问权限(在请求的上下文中)并自己解析以确定端口号也是可以接受的,但不太理想。我意识到可能会有几个连接器和几个安全连接器,所以我会让我的程序逻辑决定选择哪一个。问题是-如何获取该信息?谢谢!
2个回答

3

我相信这方面没有API可用。您可以通过web.xml中的servlet环境参数进行配置。明显的缺点是,现在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连接器,无论端口配置为何。

我认为安全约束配置是强制页面使用 SSL 的最佳方法。如果我们不使用安全约束来强制使用 SSL,则用户可以将 HTTPS 协议替换为 HTTP 并在没有 SSL 的情况下使用它。 - Arun P Johny

1
最简单的解决方案可能是在servlet的init()方法中搜索server.xml文件、解析它并将端口号存储在某处。该servlet应该会自动加载。
另一种选择是将此代码放入您的构建脚本中,并在构建时将值复制到web.xml文件中。但这意味着您必须在本地安装相同的Tomcat,或者您必须可以远程访问server.xml文件。
我更喜欢第一种解决方案,因为您可以让servlet尽早失败,如果无法确定端口,则Web应用程序不会启动。这样,您就不会在未来的某个未指定时间遇到神秘的错误,也不需要在每个请求期间浪费时间(端口号无法更改而不重新启动Tomcat)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接