Java EE获取servlet容器端口

时间:2011-02-22 15:46:22

标签: java tomcat java-ee-6

我想以编程方式获取部署了我的Java EE应用程序的servlet容器端口。我假设在JMX bean中会有一些东西,但我似乎找不到任何东西。

在有人说从HttpRequest或HttpResponse获取端口之前,应该注意这个进程在servlet后面运行,并且没有与请求或响应的交互。

2 个答案:

答案 0 :(得分:3)

一种可能的“hack”是在运行时解析server.xml并识别配置的端口。

但看起来有一种方法可以使用JMX / MBeans来实现它。

JMX Console listening to Tomcat's PID

答案 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);
}