首先出现这个问题的前提是,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 里配置