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

本文探讨了在Servlet使用注解方式配置时,Filter仅能通过urlPatterns过滤URL模式而无法通过servletNames指定Servlet的问题,并给出了使用web.xml配置解决该问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值