3

我的过滤器映射web.xml如下:

  <filter>
    <filter-name>LoginCheckFilter</filter-name>
    <filter-class>com.tutorial.filter.LoginCheckFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LoginCheckFilter</filter-name>
    <url-pattern>/admin*</url-pattern>
  </filter-mapping>

当我运行我的应用程序并点击http://localhost:8080/admin我的过滤器时,我的过滤器没有被执行。我不明白为什么。

图案有没有问题。此外,如果我'*'从模式中删除,那么过滤器将在点击以上 url 时执行。

在这方面需要帮助。谢谢。

4

3 回答 3

9

规范(第 12.2 段)说明如下:

在 Web 应用程序部署描述符中,使用以下语法来定义映射:

  • 以“/”字符开头并以“/*”后缀结尾的字符串用于路径映射。

  • 以“*”开头的字符串。前缀用作扩展映射。

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

  • 仅包含“/”字符的字符串表示应用程序的“默认”servlet。在这种情况下,servlet 路径是请求 URI 减去上下文路径,并且路径信息为空。

  • 所有其他字符串仅用于完全匹配。

所以 the*是字面意思的,除非模式以结尾/*或开头*.

于 2012-06-13T22:00:44.610 回答
2

使用/admin/*而不是/admin*.

Servlet 容器将无法识别/admin*为正确的 URL 模式。

于 2012-06-13T21:54:31.470 回答
1

也许尝试:

<url-pattern>/admin/*</url-pattern>
于 2012-06-13T21:55:10.597 回答