【问题标题】:Mapping filter to the context-root of webapp in Tomcat7将过滤器映射到Tomcat7中webapp的上下文根
【发布时间】:2013-07-11 21:42:54
【问题描述】:

我正在制作一个小型网络应用程序(这可能被认为是一项单任务)。我的工具是java7、tomcat7.0.40。

我有一个过滤器,叫做 FlowFilter。下面是web.xml中FlowFilter的定义和映射:

<filter>
    <filter-name>FlowFilter</filter-name>
    <filter-class>path.to.filter.FlowFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>FlowFilter</filter-name>
    <url-pattern></url-pattern>
    <url-pattern>*.flow</url-pattern>
    <url-pattern>*.request</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>ERROR</dispatcher>
    <dispatcher>INCLUDE</dispatcher>    
</filter-mapping>

我的 webapp 根目录位于:http://[host]/mywebapp。

我还有一个通过 web.xml 配置的欢迎文件:

<welcome-file-list>
    <welcome-file>jsp/index.jsp</welcome-file>
</welcome-file-list>

从映射上看,我需要 FlowFilter 正好在以下 3 种情况下执行:

  1. 当请求以“.flow”结束时
  2. 当请求以“.request”结束时
  3. 当我访问 http://[host]/mywebapp(“”映射)时。

问题是在第三种情况下永远不会调用 FlowFilter。

正如我在 servlet-3 规范 12.2 和 6.2.4 中所读到的,url-pattern 规则适用于过滤器。

但是当我调试 Tomcat 的 ApplicationFilterFactory.matchFiltersURL 时,过滤器的 url 模式永远不会与“”映射匹配。

问题是:只是Tomcat还没有实现这样的功能,还是我误读了规范或者我以错误的方式映射过滤器,以及为什么。

谢谢。

【问题讨论】:

    标签: java jsp filter servlet-3.0


    【解决方案1】:

    如果你已经定义了一个&lt;welcome-file-list&gt; 这个will beat the filter

    您可以在应用过滤规则后删除&lt;welcome-file-list&gt; 并自行重定向。并尝试使用&lt;url-pattern&gt;/&lt;/url-pattern&gt; 匹配上下文根。

    另见this answer

    【讨论】:

    • 感谢您的回答。现在我明白为什么它失败了。很遗憾我之前读过这个错误和答案,但不专心。所以,让我再次澄清一下,当规范说:“当使用 样式处理 元素时,容器必须确定 是否匹配使用第 12 章中定义的路径映射规则的请求 URI,“将请求映射到 Servlet”,这隐含地暗示过滤器模式仅在应用了欢迎文件后才应用,因此“”映射规则变得不适用于过滤器对吧?
    • 据我了解 Mark Thomas,这里的规范有点不清楚。我还没有阅读整个规范,所以我很难说出真正的意图是什么;)我从测试中知道的是映射“”似乎适用于 Servlet,但不适用于过滤器。只要没有定义欢迎文件列表,映射“/”就适用于过滤器。
    • 谢谢,我想我明白你的意思了。我认为这对我来说和在这种情况下对你一样清楚。
    • 另外你应该注意 webapp 文件夹中的 index.jsp 或 index.html 文件:contaier 默认将它们标记为欢迎文件,它还会阻止过滤器工作。
    猜你喜欢
    • 1970-01-01
    • 2017-11-28
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多