我是 tomcat 的新手,我需要过滤服务器上的 URL,以接受某些 URL 的所有客户端,并仅接受其他 URL 的特定 IP。
具体来说,我想要接受此通配符 URL 的所有客户端:
/abc/def/xyz*
并且我希望对于所有其他通配符 URL,仅接受特定的 IP:
/abc/def/*
我尝试在 web.xml 中添加以下几行
<filter>
<filter-name>Accept all</filter-name>
<filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
<init-param>
<param-name>allow</param-name>
<param-value>.*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Accept all</filter-name>
<url-pattern>/abc/def/xyz*</url-pattern>
</filter-mapping>
<filter>
<filter-name>Accept OnlyMe</filter-name>
<filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
<init-param>
<param-name>allow</param-name>
<param-value>64.64.64.64</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Accept OnlyMe</filter-name>
<url-pattern>/abc/def/*</url-pattern>
</filter-mapping>
这只会阻止 /abc/def/*,但不允许所有人访问 /abc/def/xyz*
有什么办法可以做我想做的事吗?
谢谢
吉尔伯特
答案1
答案2
那没有用。
当我不指定“允许”参数时,我得到相同的结果(阻止/abc/def/*但没有人可以看到/abc/def/xyz*)。
在我的搜索中,我发现了两件事:
(1)我的 url 模式 xyz* 不受 tomcat 支持(通配符),
(2) 此链接解释了过滤器的执行顺序(过滤顺序)
基于这些发现,我改变了我的需求:我很乐意让所有人访问 /abc/def/xyz/* 并阻止所有与 /abc/def/xyz* 不匹配的其他 /abc/def/* 上的所有人。基本上,只接受每个人的 /abc/def/* 的子集。
鉴于上述 2 个链接(通配符 + 过滤器顺序),我编写了以下过滤器。根据我的理解,第一个(接受所有)应该允许所有人访问 /abc/def/xyz/*,第二个应该阻止所有其他与 /abc/def/xyz/* 不匹配的 url /abc/def/* 上的所有人
<filter>
<filter-name>Accept All</filter-name>
<filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
<init-param>
<param-name>allow</param-name>
<param-value>\d+\.\d+\.\d+\.\d+</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Accept All</filter-name>
<url-pattern>/abc/def/xyz/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>Block All</filter-name>
<filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
<init-param>
<param-name>deny</param-name>
<param-value>\d+\.\d+\.\d+\.\d+</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Block All</filter-name>
<url-pattern>/abc/def/*</url-pattern>
</filter-mapping>
这也不起作用。这仍然会阻止所有人访问所有 url /abc/def/*(包括 /abc/def/xyz*)。
有什么建议吗?