我在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
时,我的过滤器没有被执行。我无法理解为什么。
模式是否有任何问题。此外,如果我从模式中删除'*'
,那么过滤器将在点击上方网址时执行。
需要帮助。感谢。
答案 0 :(得分:7)
规范(第12.2段)说明如下:
在Web应用程序部署描述符中,使用以下语法 用于定义映射:
以“/”字符开头的字符串 以'/ *'后缀结尾用于路径映射。
一个字符串 以'*。'开头的前缀用作扩展名映射。
在 空字符串(“”)是一个特殊的URL模式,它完全映射到 应用程序的上下文根,即表单的请求
http://host:port/<contextroot>/
。在这种情况下,路径信息是'/'和 servlet路径和上下文路径是空字符串(“”)。一个字符串 仅包含'/'字符表示“默认”servlet 应用程序。在这种情况下,servlet路径是请求URI 减去上下文路径,路径信息为null。
所有其他字符串 仅用于完全匹配。
因此*
按字面意思理解,除非模式以/*
结尾或以*.
开头
答案 1 :(得分:2)
使用/admin/*
代替/admin*
。
Servlet容器无法将/admin*
识别为正确的网址格式。
答案 2 :(得分:1)
也许试试:
<url-pattern>/admin/*</url-pattern>