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

Web应用上下文为/时,根路径请求被*.do过滤器拦截的原因排查

为什么根路径请求会被*.do配置的AuthorizationFilter拦截?

根据你描述的情况,按道理*.do的URL模式应该只会拦截以.do结尾的请求,但根路径http://localhost:8080/被拦截确实不符合预期,下面是几个最可能的原因和排查方向:

  • 过滤器内部逻辑偏离了配置的URL规则
    很多时候问题出在过滤器的代码实现上,而不是XML配置。比如你的AuthorizationFilter里可能写了额外的判断逻辑:比如检查请求路径是否为根路径"/",然后直接执行拦截逻辑,完全忽略了配置的*.do匹配规则。你可以检查过滤器的doFilter方法,看有没有类似这样的代码:

    String uri = request.getRequestURI();
    if (uri.equals("/")) {
        // 执行拦截操作
        chain.doFilter(request, response); // 或者直接返回拦截结果
    }
    

    如果有这种硬编码的判断,不管XML配置的是什么,根路径请求都会被拦截。

  • 存在额外的filter-mapping配置
    你只贴了部分配置,有没有可能在XML里还有其他针对authorizationFilter的<filter-mapping>条目?比如:

    <filter-mapping>
        <filter-name>authorizationFilter</filter-name>
        <url-pattern>/</url-pattern>
    </filter-mapping>
    

    或者配置了<dispatcher>标签,比如包含了FORWARD、INCLUDE等类型:

    <filter-mapping>
        <filter-name>authorizationFilter</filter-name>
        <url-pattern>*.do</url-pattern>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
    

    如果根路径的请求内部转发到了某个.do路径,或者被包含了,那过滤器也会触发拦截。

  • 过滤器类上使用了注解配置冲突
    如果你在AuthorizationFilter类上添加了@WebFilter注解,比如:

    @WebFilter(urlPatterns = "/")
    public class AuthorizationFilter implements Filter {
        // ...
    }
    

    那么XML配置和注解配置会同时生效,这时候根路径请求就会被注解里的规则匹配到,导致被拦截。很多时候开发者会同时用两种配置方式,自己却没注意到。

  • 容器的特殊URL匹配行为(可能性较低)
    极少数情况下,Web容器(比如Tomcat)的URL匹配规则可能有特殊处理,但这种情况非常罕见。你可以先排查前面几个常见原因,如果都排除了,再去检查容器的文档,看是否有根路径匹配的特殊逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:01:07