我有一个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
相同的端口上可访问是不可接受的。
也不可能将端点拆分到不同的应用程序上下文中。
use only port:8080 for *.b
8080
上的所有内容,然后将*.a*
从80
转发到8080
,可以通过apache和JKMount实现此目的阿帕奇。但正如我所说的要求是不使用apache。答案 0 :(得分:3)
可以在应用程序级别使用以下组合解决:
PortAuthorisationFilter
中配置的自定义web.xml
,其中包含我们要限制的端点的过滤映射: <url-pattern>*.b</url-pattern>
ServletRequest.getLocalPort()
等于:8080
并拒绝请求。该方法声称是TCP连接中使用的端口,因此不能被欺骗。在tomcat级别,我们在端口http
和80
上有8080
个连接器,适用于整个应用程序。