2010-09-10 158 views
7

如何将过滤器映射到URL的根目录?我使用Tomcat 7.0.2并将应用程序部署为ROOT.war。欢迎页面是sign_in.xhtml。我希望在客户端发送对网站根目录(即仅限域名)的请求时或客户端请求sign_in.xhtml时运行过滤器。这是我到目前为止有:直接Servlet过滤器url映射

<filter> 
     <filter-name>My filter</filter-name> 
     <filter-class>com.myApp.myFilter</filter-class>   
    </filter> 
    <filter-mapping> 
     <filter-name>My filter</filter-name> 
     <url-pattern>/sign_in.xhtml</url-pattern> 
    </filter-mapping> 

请求sign_in.xhtml,成功地调用过滤器,但我不知道怎么去根调用过滤器的请求。根据Servlet规范(3.0版)

<url-pattern>/</url-pattern> 

映射到默认的servlet和一个空字符串映射到根。下面是从规范的相关章节:

“空字符串(”“)中恰好映射到 应用程序上下文,即一个特殊的URL模式,形式http://host:port/ /在这种情况下,路径信息的请求。是'/',servlet路径和上下文路径是 空字符串(“”)。“

但是,以下两种url模式都会导致Tomcat抛出异常。

<url-pattern></url-pattern> 
<url-pattern>""</url-pattern> 

我真的很感激,如果有人可以对此有所了解。谢谢。

安德鲁

回答

7

<url-pattern>/</url-pattern>应根请求工作。你试过了吗?

如果您的意图是更多地过滤所有请求,那么你应该使用<url-pattern>/*</url-pattern>


更新:要排除一个又一个,我测试的/url-pattern在Tomcat的7(同时使用web.xml@WebFilter(urlPatterns={"/"})),它果然没有工作。 /url-pattern然而在Tomcat 6(Servlet 2.5)和Glassfish v3(Servlet 3.0)上按预期工作。我怀疑是Tomcat 7中的一个bug,所以我已经报告了issue 49914这个。

+0

感谢您关注此BalusC。如果用户需要更改密码,我打算强制重定向。过滤器看起来是合适的解决方案。我想我必须等待7.0.3或想出不同的东西。有任何想法吗? – 2010-09-10 21:09:59

+0

侦听'/ *'的过滤器只在请求URI为空时才会采取行动。 – BalusC 2010-09-10 21:36:03

+0

我会给它一个解决方案,然后在Tomcat bug修复后更新url-patten。 – 2010-09-10 22:08:19