Springboot 拦截器的背后

 今天写了个拦截器对一些mapping做了些处理,写完之后突然很想看看拦截器是怎么加进spring里面。对着源码debug了一遍。又有了新的收获。

1.拦截器的实现

  1.实现HandlerInterceptor

复制代码
public class MyHandlerInterceptor implements HandlerInterceptor {     @Override     public boolean preHandle(HttpServletRequest request,                              HttpServletResponse response,                              Object handler) throws Exception {         System.out.println("---------preHandle--------");         return true;     }      /**      * controller执行之后,且页面渲染之前调用      * @param request      * @param response      * @param handler      * @param modelAndView      * @throws Exception      */     @Override     public void postHandle(HttpServletRequest request,                             HttpServletResponse response,                             Object handler,                             ModelAndView modelAndView) throws Exception {         System.out.println("---------postHandle--------");     }      /**      * 页面渲染之后调用,一般用于资源清理操作      * @param request      * @param response      * @param handler      * @param ex      * @throws Exception      */     @Override     public void afterCompletion(HttpServletRequest request,                                  HttpServletResponse response,                                  Object handler,                                  Exception ex) throws Exception {         System.out.println("---------afterCompletion--------");     }
复制代码

  2.将拦截器加入到拦截链里面去,这里可以实现

WebMvcConfigurer

也可以继承

WebMvcConfigurerAdapter

只是 WebMvcConfigurerAdapter这个类在Springboot2.0已经 Deprecated了,这部分内容我们后面再讲

复制代码
@Component public class MyWebMvcConfigurerAdapter implements WebMvcConfigurer {     @Override     public void addInterceptors(InterceptorRegistry registry) {         registry.addInterceptor(new MyHandlerInterceptor());     } }
复制代码

 

 

接下来我们看看拦截是怎么被调用的,在 preHandle方法打断点

 

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信