如何配置tomcat在单个应用程序中为不同的端点使用不同的端口?

我有一个tomcat .war应用程序,它有许多端点.让我们说它们是:

http://myapp.com/myapp/endpoint.a
http://myapp.com/myapp/endpoint.b

我希望http://myapp.com/myapp/endpoint.a可通过端口80访问,而http://myapp.com:8080/myapp/endpoint.b仅可通过端口8080使用.

我不能在tomcat前面使用apache,并且/myapp/endpoint.b可以在与/myapp/endpoint.a相同的端口上访问是不可接受的.

将端点拆分到不同的应用程序上下文中也是不可能的.

至今:

> Spring启动允许将管理端点设置为可以在不同的端口上访问,但我们没有使用springboot,我不确定它实现了什么级别. http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-monitoring.html#production-ready-customizing-management-server-address
>我一直在查看tomcat连接器文档https://tomcat.apache.org/tomcat-7.0-doc/config/http.html,但它们似乎都将端口/协议连接到整个应用程序,并且不允许特定的端点,例如仅使用端口:8080表示* .b
>通过在tomcat中允许端口8080上的所有内容,然后在apache中将* .a *从80转发到8080,可以通过apache和JKMount实现这一点.但正如我所说的要求是不使用apache.
>如果这有帮助,我正在使用弹簧.

最佳答案 它可以在应用程序级别上解决,并结合使用:

>在web.xml中配置的自定义PortAuthorisationFilter,其中包含我们要限制的端点的过滤器映射:

< URL模式> * b将./ URL模式>

>在过滤器内部,我们检查ServletRequest.getLocalPort()等于:8080并拒绝请求.此方法声称是TCP连接中使用的端口,因此不能欺骗.

在tomcat级别,我们在端口80和8080处具有适用于整个应用程序的http连接器.

点赞