Spring MVC自定义拦截器
- Spring MVC也可以使用拦截器对请求进行拦截处理,用户
可以自定义拦截器来实现特定的功能,自定义的拦截器必
须实现HandlerInterceptor接口
实现自定义拦截器的步骤
- 建一个类 实现HandlerInterceptor接口
- 配置自定义拦截器
下面配了三个拦截器,<bean 标签的都是拦截所有资源。
第二个mvc:interceptor标签的拦截器 通过path属性 拦截指定资源
HandlerInterceptor接口
- 实现HandlerInterceptor接口,要实现三个方法:
- preHandle()
该方法在目标方法之前被调用
若返回值为true,则继续调用后续的拦截器和目标方法。
若返回值为false,则不会调用后续的拦截器和目标方法。
作用:考虑做权限,日志,事务等 - postHandle()
调用目标方法hi后,但渲染视图(DispatcherServlet 向客户端返回响应前被调用)之前调用。
作用:可以对请求域中属性或视图作出修改 - afterCompletion()
渲染视图之后调用,即在在 DispatcherServlet 完全处理完请求后被调用
作用:释放资源
- 拦截器方法执行顺序
多个拦截器的执行步骤
- preHandle按配置文件顺序执行
- postHandle按配置文件的反序执行
- afterCompletion按配置文件的反序执行
图解如下
当有某个拦截器,本例为secondInterceptor的prehandle方法return的false,则执行顺序如下图蓝色实线
因为afterCompletion是根据interceptorIndex值开始遍历执行的, 这个值是preHandle方法赋的。
也就是只要preHandle返回true的方法,那它的afterCompletion就都会被执行