我正在尝试最小化我的Web应用程序配置,其中一件我要删除的事情是端口号映射:
我在我的web.xml中进行了以下配置,但我需要能够构建https URL以及重定向:
上述代码块告诉Servlet容器将HTTP请求重定向到其HTTPS对应项。显然,Tomcat知道请求来自哪个连接器,在server.xml中查找该连接器的“redirectPort”属性,并使用它构建HTTPS URL。
根据以前/相关的问题,似乎没有一种标准或特定于Tomcat的方法可以获取请求的相应HTTPS端口:
- Tomcat:如何在Java中获取安全端口号? - 获取JSP页面的服务器名称和端口号以进行HTTPS
简而言之,我的问题是,您有什么想法可以在不明确配置Web应用程序中的相应HTTPS端口号的情况下获取不安全请求的相应HTTPS端口号?
我提出的一个想法是从Web应用程序向自身发出HTTP调用,使用与当前请求相同的端口号访问安全约束后面的路径,并从响应中解析重定向位置。当然,应缓存响应。是否有更直接的方法?
- http: 80 -> https: 443
- http: 9080 -> https: 9443
我在我的web.xml中进行了以下配置,但我需要能够构建https URL以及重定向:
<security-constraint>
<web-resource-collection>
<web-resource-name>secure</web-resource-name>
<url-pattern>/https/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
上述代码块告诉Servlet容器将HTTP请求重定向到其HTTPS对应项。显然,Tomcat知道请求来自哪个连接器,在server.xml中查找该连接器的“redirectPort”属性,并使用它构建HTTPS URL。
根据以前/相关的问题,似乎没有一种标准或特定于Tomcat的方法可以获取请求的相应HTTPS端口:
- Tomcat:如何在Java中获取安全端口号? - 获取JSP页面的服务器名称和端口号以进行HTTPS
简而言之,我的问题是,您有什么想法可以在不明确配置Web应用程序中的相应HTTPS端口号的情况下获取不安全请求的相应HTTPS端口号?
我提出的一个想法是从Web应用程序向自身发出HTTP调用,使用与当前请求相同的端口号访问安全约束后面的路径,并从响应中解析重定向位置。当然,应缓存响应。是否有更直接的方法?
编辑:添加了一个包含这个想法代码的答案。