gpt4 book ai didi

java - 如何允许根上下文中的 servlet 过滤器在其他上下文中工作?

转载 作者:行者123 更新时间:2023-11-28 22:50:48 26 4
gpt4 key购买 nike

我有一个 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>

但是这两种方法都不起作用。我认为这是一个安全问题——其他上下文需要明确允许根过滤器。我如何让它发挥作用?

最佳答案

你不能让它工作。 Web 应用程序是独立的。在映射任何过滤器或 Servlet 之前,将请求映射到 Web 应用程序。

使用 Tomcat 的最佳选择(假设您不想要多个过滤器定义)是将您的过滤器重新实现为 Tomcat Valve 并在主机上配置该 Valve。

关于java - 如何允许根上下文中的 servlet 过滤器在其他上下文中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40292830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com