7

如何将过滤器映射到 URL 的根?我正在使用 Tomcat 7.0.2 并将应用程序部署为 ROOT.war。欢迎页面是 sign_in.xhtml。每当客户端发送对站点根目录的请求(即仅域名)或客户端请求 sign_in.xhtml 时,我想运行过滤器。这是我到目前为止所拥有的:

  <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,成功调用过滤器,但我不确定如何获取root调用过滤器的请求。根据 Servlet 规范(3.0 版)

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

映射到默认 servlet,空字符串映射到根。这是规范中的相关部分:

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

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

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

如果有人能对此有所了解,我将不胜感激。谢谢你。

安德鲁

4

1 回答 1

7

<url-pattern>/</url-pattern>应该适用于根上的请求。你试过了吗?

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


更新:为了排除一个和另一个,我在 Tomcat 7 上测试了url-patternof (同时使用and ),它确实没有按预期工作。然而,of在 Tomcat 6 (Servlet 2.5) 和 Glassfish v3 (Servlet 3.0) 上按预期工作。我怀疑 Tomcat 7 中存在错误,因此我报告了关于此的问题 49914/web.xml@WebFilter(urlPatterns={"/"})url-pattern/

于 2010-09-10T17:55:32.860 回答