拦截器的概述

  1. SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术
  2. 可以定义拦截器链(栈),连接器链就是将拦截器按着一定的顺序结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按着定义的顺序执行。
  3. 拦截器和过滤器的功能比较类似,有区别
    • 过滤器是Servlet规范的一部分,任何框架都可以使用过滤器技术。
    • 拦截器是SpringMVC框架独有的。
    • 过滤器配置了/*,可以拦截任何资源。
    • 拦截器只会对控制器中的方法进行拦截。
  4. 拦截器也是AOP思想的一种实现方式
    • 发送请求时被拦截器拦截,在控制器的前后添加额外功能.
    • 跟 AOP 区分开.AOP 在特定方法前后扩充(对 ServiceImpl)
    • 拦截器,请求的拦截.针对点是控制器方法.(对 Controller)
  5. 想要自定义拦截器,需要实现HandlerInterceptor接口

实现自定义拦截器的步骤

  1. 新建controller并实现HandlerInterceptor重写方法

  2. HandlerInterceptor接口中的方法

    方法名 执行顺序 页面跳转 返回值
    preHandle controller方法执行前执行拦截的方法 request请求转发.response重定向 true:放行. false:不放行
    postHandle controller方法执行后执行的方法,在JSP视图执行前 request请求转发.response重定向 无返回值
    postHandle 在JSP之后执行 request,response不能在跳转页面 无返回值

    image-20191224112319984

  3. 配置SpringMVC.xml文件

    image-20191224113838898

image-20191224114040609

实现自定义拦截器栈

前两步一样,配置SpringMVC.xml文件

image-20191224115030877

其两个拦截器方法的依次实现顺序遵循,先进后出.即在控制器之前执行的方法,先进的先执行。在控制器后执行的方法,后进的先执行。

image-20191224115322380