首先出现这个问题的前提是,Servlet使用注解方式。
Filter 和 Servlet 如下:
package com.jxust.servlet;
@WebServlet("/CartItemServlet")
public class FirstServlet extends HttpServlet {
//BaseServlet
...
package com.jxust.filter;
@WebFilter(
urlPatterns = {
"/user/*",
"/cart/*"
},
servletNames = {
"FirstServlet",
"SecondServlet"
})
public class LoginFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("LoginFilter拦截.....");
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
}
测试发现:LoginFilter 只能过滤 urlPatterns 的 /user/*
、/cart/*
请求 ,无法过滤 servletNames 里的Servlet
目前测试发现,Servlet 使用 web.xml 文件配置方式可以解决,怀疑是 Servlet 注解方式导致 Filter 无法找到对应的Servlet,也就没法过滤。
web.xml
...
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.jxust.servlet.FirstServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>com.jxust.servlet.SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/SecondServlet</url-pattern>
</servlet-mapping>
Filter 可以使用注解,没必要必须在 web.xml 里配置