1. 程式人生 > >註解方式過濾器(Filter)不能過濾Servlet的問題

註解方式過濾器(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>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 裡配置