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

Servlet中@WebFilter的URL Pattern大小写敏感问题咨询

解决WebFilter URL Pattern不区分大小写的问题

方法1:在过滤器内部自定义大小写不敏感的匹配逻辑

Servlet规范默认的URL Pattern是大小写敏感的,最灵活的方式是在过滤器的doFilter方法里自行处理URL匹配:

@WebFilter(urlPatterns = "/*") // 先拦截所有请求
public class PageFilter extends MyBaseFilter {

    private static final String TARGET_PATH = "/path/to/directory/".toLowerCase();

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String requestUri = httpRequest.getRequestURI().toLowerCase();
        
        // 判断请求URI是否以目标路径开头
        if (requestUri.startsWith(TARGET_PATH)) {
            // 执行你的过滤逻辑,比如权限校验、日志记录等
            // ...
        }
        // 放行请求到后续过滤器或业务逻辑
        chain.doFilter(request, response);
    }
}

这里先把过滤器的拦截范围设为/*,再将请求URI和目标路径统一转成小写(或大写)做前缀匹配,就能覆盖任意大小写组合的URL。

方法2:修改Servlet容器的全局配置(以Tomcat为例)

如果应用部署在Tomcat上,可以通过容器配置全局关闭URL大小写敏感性:

  1. 打开Tomcat的conf/context.xml文件
  2. 在<Context>标签中添加caseSensitive="false"属性:
<Context caseSensitive="false">
    <!-- 原有配置内容 -->
</Context>

注意这是全局设置,会影响所有部署在该Tomcat上的Web应用,若其他功能依赖大小写敏感的URL,需谨慎使用。

方法3:Spring Boot项目结合自定义路径匹配

如果是Spring Boot应用,可以通过自定义PathMatcher配合FilterRegistrationBean实现需求:

@Configuration
public class FilterConfig {

    @Bean
    public FilterRegistrationBean<PageFilter> pageFilterRegistration() {
        FilterRegistrationBean<PageFilter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new PageFilter());
        
        // 初始化不区分大小写的路径匹配器
        AntPathMatcher pathMatcher = new AntPathMatcher();
        pathMatcher.setCaseSensitive(false);
        
        // 在过滤器内部用该匹配器判断请求URL
        // 也可以直接在PageFilter的doFilter方法中注入这个PathMatcher来使用
        
        registration.setUrlPatterns(Collections.singletonList("/*"));
        return registration;
    }
}

在PageFilter的doFilter方法里,就可以用这个PathMatcher来判断请求URL是否匹配/path/to/directory/*的任意大小写形式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:52:38