1.定义
Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。
2.拦截器的定义
注解:
prehandle : handle方法执行前 设置false就不会往下执行
posthandle: handle执行后,modelAndView之前
afterCommpletion: 返回modelAndView之后
如果prehandle设置为true ,一定会执行afterCommpletion
3,配置文件
针对某种mapping配置拦截器
针对所有mapping配置全局拦截器:(配置两个拦截器)
/和/的区别*
/ : 拦截所有请求,不包括jsp。
/* : 拦截所有
4,测试结果
5,运行流程
**HandlerInterceptor1的preHandler方法返回false,
HandlerInterceptor2返回true**,运行流程如下:
HandlerInterceptor1..preHandle..
从日志看出第一个拦截器的preHandler方法返回false后第一个拦截器只执行了preHandler方法,其它两个方法没有执行,第二个拦截器的所有方法不执行,且controller也不执行了。
**HandlerInterceptor1的preHandler方法返回true,
HandlerInterceptor2返回false**,运行流程如下:
HandlerInterceptor1..preHandle..
HandlerInterceptor2..preHandle..
HandlerInterceptor1..afterCompletion..
从日志看出第二个拦截器的preHandler方法返回false后第一个拦截器的postHandler没有执行,第二个拦截器的postHandler和afterCompletion没有执行,且controller也不执行了。
总结:
preHandle按拦截器定义顺序调用
postHandler按拦截器定义逆序调用
afterCompletion按拦截器定义逆序调用
postHandler在拦截器链内所有拦截器返成功调用
afterCompletion只有preHandle返回true才调用