繁体   English   中英

Java EE获取servlet容器端口

[英]Java EE getting servlet container port

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

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

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

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

JMX控制台监听Tomcat的PID

我碰巧需要从请求中提取tomcat端口。 这样我就可以比较并判断servlet请求是来自tomcat端口http://localhost:8080还是来自apache port 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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM