如何仅从应用程序上下文路径过滤请求?

How to filter requests ONLY from application context path?

环境:

我试图在调用应用程序上下文路径时 执行过滤器请求,但我没有找到任何使用 url 模式的方法,因为url-pattern /* 接收所有请求。

我想在请求时执行过滤器 url http://localhost:8080/myapp 但是过滤器没有被触发。

<filter-mapping>
    <filter-name>PrincipalFilter</filter-name>
    <url-pattern>/</url-pattern>
</filter-mapping>

我也尝试使用空字符串,但在部署时解析 web.xml 时出错,可能是服务器太旧了。

有什么想法吗?

I also tried with emtpy string

这是正确的解决方案。另见 Difference between / and /* in servlet mapping url pattern


but I got an error on parsing web.xml on deploying, maybe the server is too old

就这样吧。你真的需要升级任何比以前的主要版本更旧的东西(Servlet API 目前已经是 4.0,而 2.4 是在 2003 年发布的,所以它甚至有十多年的历史了!),否则你不会能够以最小的努力升级,并且您将被迫最终基本上重写整个应用程序。

如果您真的无法升级,那么最好的办法是改为在 /* 上收听,并在执行实际操作之前简单地检查 request.getRequestURI() returns 是否只有 request.getContextPath()逻辑,否则只继续过滤器链而不做任何更改。