注解方式过滤器(Filter)不能过滤Servlet的问题

首先出现这个问题的前提是,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>FirstServletservlet-name>
    <servlet-class>com.jxust.servlet.FirstServletservlet-class>
  servlet>
  <servlet>
    <servlet-name>SecondServletservlet-name>
    <servlet-class>com.jxust.servlet.SecondServletservlet-class>
  servlet>

   <servlet-mapping>
    <servlet-name>FirstServletservlet-name>
    <url-pattern>/FirstServleturl-pattern>
  servlet-mapping>
  <servlet-mapping>
    <servlet-name>SecondServletservlet-name>
    <url-pattern>/SecondServleturl-pattern>
  servlet-mapping>

Filter 可以使用注解,没必要必须在 web.xml 里配置

你可能感兴趣的:(异常)