• WebMvcConfigurer添加多个拦截器的拦截路径问题


    结论:每个拦截器的addPathPatterns,excludePathPatterns添加的路径是各自独立的,如果添加的一个拦截器没有addPathPattern任何一个url则默认拦截所有请求,如果没有excludePathPatterns任何一个请求,则默认不放过任何一个请求。

    验证过程:

    两个拦截器:

    public class TestInterceptor1 implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            response.getOutputStream().write("To TestInterceptor1...".getBytes());
    
            return true;
        }
    }
    
    public class TestInterceptor2 implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            response.getOutputStream().write("To TestInterceptor2...".getBytes());
    
            return true;
        }
    }

    情景一:两个拦截器的拦截路径不同

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry interceptorRegistry){
            interceptorRegistry.addInterceptor(new TestInterceptor1()).addPathPatterns("/ready");
            interceptorRegistry.addInterceptor(new TestInterceptor2()).addPathPatterns("/health");
        }
    }

    -------------测试结果-------------

     

    情景二 :其中一个拦截器不配置拦截路径

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry interceptorRegistry){
            interceptorRegistry.addInterceptor(new TestInterceptor1()).addPathPatterns("/ready");
            interceptorRegistry.addInterceptor(new TestInterceptor2());
        }
    }

    -------------测试结果-------------

     

    情景三:

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry interceptorRegistry){
            interceptorRegistry.addInterceptor(new TestInterceptor1());
            interceptorRegistry.addInterceptor(new TestInterceptor2()).addPathPatterns("/health");
        }
    }

    -------------测试结果-------------

     

     情景四:其中一个拦截器的拦截路径在另一个拦截器的不拦截路径内

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry interceptorRegistry){
            interceptorRegistry.addInterceptor(new TestInterceptor1()).addPathPatterns("/ready");
            interceptorRegistry.addInterceptor(new TestInterceptor2()).excludePathPatterns("/ready");
        }
    }

    -------------测试结果-------------

     

     

    从源码上看每个拦截器interceptor的includePatterns和excludePatterns也确实是独立的,可以参考下

    public InterceptorRegistration addInterceptor(HandlerInterceptor interceptor) {
       InterceptorRegistration registration = new InterceptorRegistration(interceptor);
       this.registrations.add(registration);
       return registration;
    }
    
    public InterceptorRegistration addPathPatterns(List<String> patterns) {
       this.includePatterns.addAll(patterns);
       return this;
    }
    
    public InterceptorRegistration excludePathPatterns(List<String> patterns) {
       this.excludePatterns.addAll(patterns);
       return this;
    }
  • 相关阅读:
    CDN缓存服务器现状,squid、nginx、trafficserver、ATS性能测试
    [钉钉通知系列]Jenkins发布后自动通知
    查税号,税号查询,纳税人识别号查询
    体验万象优图鉴黄服务
    红象云腾
    我眼中的领域驱动设计
    手工DIY:手机变身扫描仪_极客迷
    【CZURET-16】成者科技(CZUR)ET16智能扫描仪OCR文字识别书籍文档票据零边距高速A3A4高拍仪高清1600万像素【行情 报价 价格 评测】-京东
    技术漫谈 | 使用docker-compose进行python开发
    饿了么的 PWA 升级实践
  • 原文地址:https://www.cnblogs.com/aland-1415/p/14343975.html
Copyright © 2020-2023  润新知