Loading

拦截器

实现 HandlerInterceptor/HandlerInterceptorAdapter 接口

作用范围:
在将请求发送到控制器之前
在将响应发送给客户端之前

拦截器上的三种方法:
preHandle
调用时间:Controller方法处理之前
执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行
若返回false,则中断执行,注意:不会进入afterCompletion,常用于登录检测

postHandle
调用前提:preHandle返回true
调用时间:Controller方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这个方法中你可以对ModelAndView进行操作
执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序倒着执行。postHandle虽然post打头,但post、get方法都能处理

afterCompletion
调用前提:preHandle返回true
调用时间:DispatcherServlet进行视图的渲染之后
多用于清理资源,注销登陆

@Component
public class ProductServiceInterceptor implements HandlerInterceptorAdapter {
   @Override
   public boolean preHandle(
      HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

      return true;
   }
   @Override
   public void postHandle(
      HttpServletRequest request, HttpServletResponse response, Object handler, 
      ModelAndView modelAndView) throws Exception {}

   @Override
   public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
      Object handler, Exception exception) throws Exception {}
}

使用 WebMvcConfigurerAdapter向InterceptorRegistry注册此Interceptor

@Component
public class ProductServiceInterceptorAppConfig extends WebMvcConfigurerAdapter {
   @Autowired
   ProductServiceInterceptor productServiceInterceptor;

   @Override
   public void addInterceptors(InterceptorRegistry registry) {
      registry.addInterceptor(productServiceInterceptor);
      // 设置路径,排除路径
      // 国际化,文件上传
   }
}
posted @ 2021-04-08 16:37  koko1996  阅读(61)  评论(0)    收藏  举报