定义
Spring MVC 的拦截器(Interceptor)与 asp.net的管道过滤器类似,它主要用于拦截用户的请求并做相应的处理,通常应用在权限验证、记录请求信息的日志、判断用户是否登录等。
拦截器的定义
在 Spring MVC 框架中定义一个拦截器需要对拦截器进行定义和配置,主要有以下 2 种方式。
通过实现 HandlerInterceptor 接口或继承 HandlerInterceptor 接口的实现类(例如 HandlerInterceptorAdapter)来定义;
- 通过实现 WebRequestInterceptor 接口或继承 WebRequestInterceptor 接口的实现类来定义。
- 本节以实现 HandlerInterceptor 接口的定义方式为例讲解自定义拦截器的使用方法。示例代码如下。
springmvc配置文件配置自定义拦截器
控制器
浏览器访问结果
控制台输出
详细解析
- 浏览器访问http://localhost:8080/Login/main 前端控制器DispatchServlet处理请求,通过处理映射器HandlerMapping获取handler(也就是我们后台的Controller里的方法,返回给DispatchServlet。
- DispatchServlet请求适配器处理器HandlerAdapter
- HandlerAdapter根据handler配置执行对应的handler(也就是控制器里的方法Index)
- 执行控制器方法Index前,就会被TestInterceptor拦截器截获,执行preHandle方法,
- index方法调用后,在视图还未解析的时候,执行postHandle方法
- index方法执行完成后执行,即视图渲染结束后执行afterCompletion方法