SpringBoot拦截器总结

1.定义拦截器类实现HandlerInterceptor接口,并实现preHandle,postHandle,afterCompletion三个方法。

  • preHandle
    调用时间:Controller方法处理之前
    执行顺序:链式Intercepter情况下,Intercepter按照注册声明的顺序一个接一个执行,若返回false,则中断执行。
    备注:不会进入afterCompletion方法
  • postHandle
    调用前提:preHandle返回true
    调用时间:在Controller方法处理完之后,DispatcherServlet进行视图的渲染之前执行,即可以在这个方法中对ModelAndView进行操作
    执行顺序:链式Intercepter情况下,Intercepter按照注册声明的顺序倒着执行。
    备注:postHandle虽然post打头,但post、get方法都能处理
  • afterCompletion
    调用前提:preHandle返回true
    调用时间:DispatcherServlet进行视图的渲染之后
    执行顺序:链式Intercepter情况下,Intercepter按照注册声明的顺序倒着执行。
    备注:多用于清理资源
@Slf4j
public class SystemInterceptor implements HandlerInterceptor {
    
    
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
      throws Exception {
    
    
    log.info("preHandle执行了");
    return true;
  }
  @Override
  public void postHandle( HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
    
    
    log.info("postHandle执行了");
  }
  @Override
  public void afterCompletion(
      HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
    
    
    log.info("afterCompletion执行了");
  }
}

2.配置InterceptorConfig实现WebMvcConfigurer接口创建Bean实例并注册声明,注册顺序即执行顺序。

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    
    
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    
    
    registry.addInterceptor(systemInterceptor()).addPathPatterns("/**");
  }
  @Bean
  public SystemInterceptor systemInterceptor() {
    
    
    return new SystemInterceptor();
  }
}

猜你喜欢

转载自blog.csdn.net/DeweyLau/article/details/112506283