SpringBoot - 拦截器

拦截器

两个步骤:

  1. 实现HandlerInterceptor接口创建拦截器
    public class LoginInterceptor implements HandlerInterceptor {
          
          
        /**
         * 发送请求之前执行
         *
         * @param request
         * @param response
         * @param handler
         * @return
         * @throws Exception
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
          
          
            //true代表放行,false代表拦截
            return false;
        }
    
        /**
         * 发送请求完成后执行
         * 这个方法只会在当前这个Interceptor的preHandle方法返回值为true的时候才会执行
         *
         * @param request
         * @param response
         * @param handler
         * @param modelAndView
         * @throws Exception
         */
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
          
          
    
        }
    
        /**
         * 整个请求完成之后执行,也就是DispatcherServlet渲染了视图执行(此方法用于清理资源)
         * 该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。
         *
         * @param request
         * @param response
         * @param handler
         * @param ex
         * @throws Exception
         */
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
          
          
    
        }
    }
    
    转载自:https://blog.csdn.net/weixin_41767154/article/details/84648873
  2. 实现WebMvcConfigurer接口配置拦截器(不要拦截静态资源)
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
          
          
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
          
          
            //添加自己写的拦截器,拦截路径为(/**),静态资源放行路径为(/css/**)
            registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**")
                    .excludePathPatterns("/css/**");
        }
    }
    

注意点:

拦截器中方法的执行顺序是 preHandle -> Controller -> postHandle ->
afterCompletion只有 preHandle返回true,才会执行后面的方法

拦截器的执行过程:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43985446/article/details/113940279