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. 当请求以“.flow”结尾时
  2. 当请求以“.request”结尾时
  3. 当我访问 http://[host]/mywebapp (“”映射)。

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

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

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

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

谢谢你。

4

1 回答 1

2

如果您定义了 a<welcome-file-list>将击败过滤器

<welcome-file-list>应用过滤器规则后,您可以自行删除和重定向。并尝试<url-pattern>/</url-pattern>用于匹配上下文根。

另请参阅此答案

于 2013-07-13T13:54:51.003 回答