注册拦截器(SpringBoot)

SpringMVC 中提供了AOP风格的拦截器, 拥有更加精细的拦截处理能力。 Spring Boot中拦截器的注册则更加方便, 步骤:

  • 创建SpringBoot项目, 添加spring-boot-starter-web依赖。
  • 创建拦截器实现HandleInterceptor接口, 代码如下:
  • /**
     * 全局拦截器
     */
    public class MyInterceptor implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("MyInterceptor>>>preHandle");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("MyInterceptor>>>postHandle");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("MyInterceptor>>>afterCompletion");
        }
    }

    说明: 拦截器中的preHandle -> Controller -> postHandle -> afterCompletion 的顺序执行, 注意, 只有preHandle方法返回true时后面的方法才会执行。当拦截器链内存在多个拦截器时, postHandle 在拦截器链内的所有拦截器返回时才会调用, 而afterCompletion 只有preHandle返回true才调用, 但若拦截器链内的第一个拦截器的preHandle方法返回false, 则后面的方法不会执行。

  • 配置拦截器。定义配置类进行拦截器的配置, 代码如下:
  • @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        /**
         * 拦截器配置文件
         * @param registry
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new MyInterceptor())
                    .addPathPatterns("/**")//拦截路径
                    .excludePathPatterns("/hello")//排除路径
                    .excludePathPatterns("/*.png");
        }
    }

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章