You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Servlet过滤器未正常进入doFilter方法问题排查

不用创建web.xml!先排查@WebFilter的配置细节

嘿,不用急着搞web.xml哈!Servlet 3.0及以后的版本完全支持用@WebFilter注解配置过滤器,你遇到的过滤器没进入doFilter方法的问题,大概率是注解的配置细节没弄对,咱们一步步排查:

  • 检查urlPatterns是否匹配目标URL
    这是最常见的坑!比如你要拦截/admin/*下的所有请求,结果写成了/admin(只能拦截单个路径),或者路径拼写错误。举个正确的例子:

    @WebFilter(urlPatterns = "/admin/*")
    public class AuthenticationFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest req = (HttpServletRequest) request;
            HttpSession session = req.getSession(false);
            if (session == null || session.getAttribute("user") == null) {
                ((HttpServletResponse) response).sendRedirect("/login");
                return;
            }
            chain.doFilter(request, response);
        }
        // 其他init、destroy方法按需实现
    }
    

    如果要拦截多个路径,直接用数组:urlPatterns = {"/user/*", "/order/*"}

  • 确认项目启用了Servlet注解扫描
    如果你项目里已经存在极简的web.xml(比如只声明了Servlet版本),要检查有没有metadata-complete="true"属性——这个属性设为true会禁用容器对注解的扫描,改成false或者删掉就行:

    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1"
             metadata-complete="false"> <!-- 关键是这个属性 -->
    </web-app>
    

    如果根本没有web.xml,Tomcat 7+默认会自动扫描注解,除非你在Maven的打包配置里做了特殊限制。

  • 检查过滤器类是否被容器扫描到
    确保你的AuthenticationFilter类放在项目的源码目录下(比如src/main/java),而不是资源目录里。如果用了Spring框架,还要注意:@WebFilter是Servlet容器的注解,和Spring无关,如果要让Spring管理过滤器,需要额外加@Component,但单纯的Servlet过滤器只要在源码目录下就能被容器扫描到。

  • 确认dispatcherTypes覆盖了你需要的请求类型
    默认情况下,@WebFilter只拦截REQUEST类型的请求(也就是浏览器直接发起的请求),如果你的请求是通过forward转发过来的,过滤器不会触发。可以显式指定要拦截的请求类型:

    @WebFilter(urlPatterns = "/admin/*", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD})
    
  • 检查Tomcat版本是否达标
    必须用Tomcat 7.0及以上版本(对应Servlet 3.0+规范),低于这个版本的话,注解配置不生效,才需要用web.xml来配置过滤器。

先把这些点逐一排查一遍,基本就能解决过滤器不生效的问题啦,完全不需要额外创建web.xml。

内容的提问来源于stack exchange,提问作者kristheman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:08:00