zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    [Docker]一键部署gitlab中文版
    [Docker]python 2.7.5 docker-compose安装
    [CentOS7]pip安装
    快速傅里叶变换FFT
    HDU 4734 f(x)
    DP
    HDU 3555 Bomb
    HDU 5898 odd-even number
    将文本拷贝到剪贴板
    数论分块
  • 原文地址:https://www.cnblogs.com/aland-1415/p/14343975.html
Copyright © 2011-2022 走看看