註解方式過濾器(Filter)不能過濾Servlet的問題
阿新 • • 發佈:2019-02-16
首先出現這個問題的前提是,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 裡配置