我想以编程方式获取部署了我的Java EE应用程序的servlet容器端口。我假设在JMX bean中会有一些东西,但我似乎找不到任何东西。
在有人说从HttpRequest或HttpResponse获取端口之前,应该注意这个进程在servlet后面运行,并且没有与请求或响应的交互。
答案 0 :(得分:3)
一种可能的“hack”是在运行时解析server.xml并识别配置的端口。
但看起来有一种方法可以使用JMX / MBeans来实现它。
答案 1 :(得分:1)
我碰巧需要从请求中提取tomcat端口。这样我就可以比较并判断servlet请求是来自tomcat端口http://localhost:8080
还是来自apache端口http://localhost/
通过这样做,我可以确保只通过严格使用tomcat端口并通过apache端口拒绝来处理请求。这可能有助于设置请求不允许通过apache访问外部世界的安全配置。 tomcat端口仅在本地网络中可用。
该方法是创建一个tomcat阀门(假设你知道它是什么)实现了org.apache.catalina.valves.ValveBase。 该接口提供org.apache.catalina.connector.Request作为参数。
按要求:
using request.getConnector().getPort() which returns 8080. Then say.
if ( request.getServerPort() != request.getConnector().getPort() ) {
response.getWriter().print("<span>access denied</span>");
} else {
getNext().invoke(request, response);
}