Springmvc的拦截器的使用

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才调用

猜你喜欢

转载自blog.csdn.net/Cs_orange/article/details/81840766