spring mvc中拦截器的用法。

一、实现流程

(1)首先创建一个包,写入一个拦截器的类

1

(2)在spring-mvc.xml中注册这个拦截器

要点如下:

  1. 最外层是<mvc:interceptors>。
  2. 包裹着一个<mvc:interceptor>。
  3. 配置拦截器的作用路径,如果为/**或者不配置都是默认拦截所有路径<mvc:mapping path=”/**”/>。
  4. 拦截器类的位置<bean class=”com.xie.interceptors.testinterceptor”></bean>。

(3)如何写出一个拦截器类

首先需要继承HandlerInterceptor,继承这个方法之后就会要求你加入三个方法,可以实现各种时机的拦截器功能。

要注意方法的执行顺序,执行的时机,才能搞清楚你要的功能需要写在哪个方法里。

我个人认为用得最多的的是preHandle,作用时机在执行controller之前,这个方法有一个返回值,执行完你想要的拦截器方法后,需要进行return。

  1. 如果return true,将会往下走执行controller,并且执行拦截器的其他方法。
  2. 如果return false,那么接下来就不会执行controller了,会直接去执行afterCompletion(),并且退出。

1.preHandle

在业务处理器处理请求之前被调用。

  1. 如果返回false,从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链。
  2. 如果返回true,执行下一个拦截器,直到所有的拦截器都执行完毕。再执行被拦截的Controller,然后进入拦截器链,从最后一个拦截器往回执行所有的postHandle(),接着再从最后一个拦截器往回执行所有的afterCompletion()。

经常用于做权限管理,登录验证,安全校验。

2.postHandle

在业务处理器处理请求执行完成后,生成视图之前执行的动作,所以说这个方法的作用时间是在controller执行完之后,在视图渲染之前。

所以这个东西方法经常做一些渲染视图的工作。比方说,可以在modelAndView中加入数据,在视图中读取。

3.afterCompletion

最后执行的东西,在DispatcherServlet完全处理完请求后被调用,做收尾工作。

因为是最后执行的,所以可以做一些资源回收工作。比如说销毁session,清除cookie。

二、总结

这是spring mvc中拦截器的基本用法,下次将会根据实例来用拦截器实现一个功能。

发表评论

电子邮件地址不会被公开。 必填项已用*标注