一、拦截器是什么?
当请求来到DispatchServlet时,会根据HandlerMapping的机制找到处理器,返回HandlerExecutionChain对象。这个对象包含处理器和拦截器。拦截器用来增强处理器的功能。
- 处理器映射---【返回HandlerExecutionChain】处理器handler
- HandlerExecutionChain=处理器+拦截器
二、拦截器接口
public interface Handlerlnterceptor {
//处理器执行前方法 boolean preHandle(request,response,handler)
//处理器处理后方法 void postHandle(request,response,handler,ModelAndView)
//处理器完成后方法 void afterCornpletion(request,response,handler,Exception)
}
+---------------+
| preHandle |
+-------+-------+
|
+-------+-------+ +--------------+
| 处理器 +-----------> | postHandle | +------------+
+---------------+ +--------------+ |
|
+----------------+ +--------------+ |
|afterCornpletion+<------------+ 视图处理 | <-----------+
+----------------+ +--------------+
三、注册拦截器
在配置文件中实现WebMvcConfigurer接口,最后覆盖其addlntereptors方法进行注册拦截器
// 注册拦截器到Spring MVC机制,然后它会返回一个拦截器注册
InterceptorRegistration ir = registry.addInterceptor(new Interceptor1());
// 指定拦截匹配模式,限制拦截器拦截请求
ir.addPathPatterns("/interceptor/*");
四、拦截器顺序
责任链方式的顺序。按照注册时的顺序来。