【发布时间】:2017-03-10 14:57:21
【问题描述】:
我有一个 WAR 文件部署到 Tomcat 8 上的根上下文 (/),它附加了一个 servlet 过滤器。过滤器检查用户是否已登录,如果未登录,则将其重定向到登录页面。我还在/app1 和/app2 的同一个Tomcat 实例中部署了其他上下文。我希望根上下文中的过滤器也适用于其他上下文,因此我不必维护三个几乎相同的过滤器(每个上下文一个)。
问题是任何属于其他上下文的 URL 都没有被根上下文中的过滤器处理。例如,URI /foo/bar 被过滤器捕获(因为它不对应于其他上下文之一),但 /app1/foo/bar 没有被捕获。
我尝试通过修改 web.xml 文件中的过滤器映射来配置过滤器以捕获所有内容:
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我也尝试过显式添加每个上下文:
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
<url-pattern>/app1/*</url-pattern>
<url-pattern>/app2/*</url-pattern>
</filter-mapping>
但是这两种方法都不起作用。我认为这是一个安全问题——其他上下文需要明确允许根过滤器。我如何让它发挥作用?
【问题讨论】:
标签: java tomcat servlets jakarta-ee servlet-filters