将过滤器映射到Tomcat7中webapp的上下文根

时间:2013-07-13 12:44:46

标签: java jsp filter servlet-3.0

我正在制作一个小型的webapp(这可能被认为是一项单一任务)。我的工具是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. 当请求以&#34; .flow&#34;
  2. 结束时
  3. 当请求以&#34; .request&#34;
  4. 结束时
  5. 当我访问http:// [host] / mywebapp(&#34;&#34;映射)。
  6. 问题是在第三种情况下永远不会调用FlowFilter。

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

    但是当我调试Tomcat的ApplicationFilterFactory.matchFiltersURL时,过滤器的url-patterns永远不会与&#34;&#34;映射。

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

    谢谢。

1 个答案:

答案 0 :(得分:2)

如果您已定义<welcome-file-list>will beat the filter

您可以在应用过滤规则后自行删除<welcome-file-list>并重定向。并尝试使用<url-pattern>/</url-pattern>来匹配context-root。

另见this answer