为何ContentCachingFilter未仅作用于/search/*,而是全部URL?
问题分析与解决方案
你遇到的问题根源是同时使用了@Component和@WebFilter注解:@Component会让Spring把该过滤器注册为全局过滤器,直接忽略@WebFilter的urlPatterns配置,导致过滤器对所有URL生效。下面提供两种可靠的解决方式:
方案一:用FilterRegistrationBean手动注册(推荐)
这种方式能精准控制过滤器的作用路径和执行顺序,避免注解冲突问题。
步骤1:修改过滤器类,移除冲突注解
去掉@Component和@WebFilter,仅保留过滤器逻辑:
public class ContentCachingFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException { CachedBodyHttpServletRequest cachedBodyHttpServletRequest = new CachedBodyHttpServletRequest(httpServletRequest); filterChain.doFilter(cachedBodyHttpServletRequest, httpServletResponse); } }
步骤2:添加配置类注册过滤器
创建配置类,通过FilterRegistrationBean指定路径和优先级:
@Configuration public class FilterConfig { @Bean public FilterRegistrationBean<ContentCachingFilter> contentCachingFilterRegistration() { FilterRegistrationBean<ContentCachingFilter> registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new ContentCachingFilter()); // 指定仅作用于/search开头的路径 registrationBean.addUrlPatterns("/search/*"); // 设置为最高优先级,保证/search请求时第一个执行 registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE); return registrationBean; } }
方案二:保留@Component,内部手动判断路径
如果不想调整注册方式,可在过滤器内部添加路径判断,非/search请求直接放行:
@Component @Order(Ordered.HIGHEST_PRECEDENCE) public class ContentCachingFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException { String requestURI = httpServletRequest.getRequestURI(); // 仅对/search开头的请求执行缓存逻辑 if (!requestURI.startsWith("/search")) { filterChain.doFilter(httpServletRequest, httpServletResponse); return; } CachedBodyHttpServletRequest cachedBodyHttpServletRequest = new CachedBodyHttpServletRequest(httpServletRequest); filterChain.doFilter(cachedBodyHttpServletRequest, httpServletResponse); } }
内容的提问来源于stack exchange,提问作者meg1311
相关产品推荐
相关产品推荐

