定义

Spring MVC 的拦截器(Interceptor)与 asp.net的管道过滤器类似,它主要用于拦截用户的请求并做相应的处理,通常应用在权限验证、记录请求信息的日志、判断用户是否登录等。

拦截器的定义

在 Spring MVC 框架中定义一个拦截器需要对拦截器进行定义和配置,主要有以下 2 种方式。

通过实现 HandlerInterceptor 接口或继承 HandlerInterceptor 接口的实现类(例如 HandlerInterceptorAdapter)来定义;

  1. 通过实现 WebRequestInterceptor 接口或继承 WebRequestInterceptor 接口的实现类来定义。
  2. 本节以实现 HandlerInterceptor 接口的定义方式为例讲解自定义拦截器的使用方法。示例代码如下。

spring mvc 拦截器(Interceptor)详解_方法调用

springmvc配置文件配置自定义拦截器

spring mvc 拦截器(Interceptor)详解_方法调用_02

控制器

spring mvc 拦截器(Interceptor)详解_spring_03

浏览器访问结果

spring mvc 拦截器(Interceptor)详解_自定义拦截器_04

控制台输出

spring mvc 拦截器(Interceptor)详解_mvc_05

详细解析
  1. 浏览器访问http://localhost:8080/Login/main 前端控制器DispatchServlet处理请求,通过处理映射器HandlerMapping获取handler(也就是我们后台的Controller里的方法,返回给DispatchServlet。
  2. DispatchServlet请求适配器处理器HandlerAdapter
  3. HandlerAdapter根据handler配置执行对应的handler(也就是控制器里的方法Index)
  4. 执行控制器方法Index前,就会被TestInterceptor拦截器截获,执行preHandle方法,
  5. index方法调用后,在视图还未解析的时候,执行postHandle方法
  6. index方法执行完成后执行,即视图渲染结束后执行afterCompletion方法

spring mvc 拦截器(Interceptor)详解_自定义拦截器_06