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大小写敏感性:
- 打开Tomcat的
conf/context.xml文件 - 在
<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
相关产品推荐
相关产品推荐

