自定义拦截器开发过程

  1. 自定义拦截器需要实现HandlerInterceptor接口 ```java //自定义拦截器需要实现HandleInterceptor接口 public class MyInterceptor implements HandlerInterceptor { //处理器运行之前执行 @Override public boolean preHandle(HttpServletRequest request,

    1. HttpServletResponse response,
    2. Object handler) throws Exception {
    3. System.out.println("前置运行----a1");
    4. //返回值为false将拦截原始处理器的运行
    5. //如果配置多拦截器,返回值为false将终止当前拦截器后面配置的拦截器的运行
    6. return true;

    }

    //处理器运行之后执行 @Override public void postHandle(HttpServletRequest request,

    1. HttpServletResponse response,
    2. Object handler,
    3. ModelAndView modelAndView) throws Exception {
    4. System.out.println("后置运行----b1");

    }

    //所有拦截器的后置执行全部结束后,执行该操作 @Override public void afterCompletion(HttpServletRequest request,

    1. HttpServletResponse response,
    2. Object handler,
    3. Exception ex) throws Exception {
    4. System.out.println("完成运行----c1");

    }

}

  1. 注意:
  2. - 拦截器实现先进先出的原则比如123号拦截器出去就是321
  3. - 三个方法的运行顺序为 preHandle -> postHandle -> afterCompletion
  4. - 如果preHandle返回值为false,三个方法仅运行preHandle
  5. 2. 配置拦截器
  6. ```java
  7. <mvc:interceptors>
  8. <!--开启具体的拦截器的使用,可以配置多个-->
  9. <mvc:interceptor>
  10. <!--设置拦截器的拦截路径,支持*通配-->
  11. <!--/** 表示拦截所有映射-->
  12. <!--/* 表示拦截所有/开头的映射-->
  13. <!--/user/* 表示拦截所有/user/开头的映射-->
  14. <!--/user/add* 表示拦截所有/user/开头,且具体映射名称以add开头的映射-->
  15. <!--/user/*All 表示拦截所有/user/开头,且具体映射名称以All结尾的映射-->
  16. <mvc:mapping path="/*"/>
  17. <mvc:mapping path="/**"/>
  18. <mvc:mapping path="/handleRun*"/>
  19. <!--设置拦截排除的路径,配置/**或/*,达到快速配置的目的-->
  20. <mvc:exclude-mapping path="/b*"/>
  21. <!--指定具体的拦截器类-->
  22. <bean class="MyInterceptor"/>
  23. </mvc:interceptor>
  24. </mvc:interceptors>