springMVC拦截器

Spring MVC提供了Interceptor拦截机制,类似于Servlet中的Filter过滤器,用于拦截用户请求并作出相应的处理。在Spring MVC中定义拦截器有两种方法。

  • 实现HandlerInterceptor接口,或继承实现该接口的实现类(如:HandlerInterceptorAdapter)
  • 实现WebRequestInterceptor接口,或继承实现该接口的实现类
  1. 实现HandlerInterceptor接口
    如果要实现HandlerInterceptor接口,就要实现三个方法,分别是preHandle,postHandle和afterHandle
    - preHande方法:该方法实在执行控制器之前执行的。返回值为boolean类型,false为拦截请求,true为放行
    - postHandle方法:该方法在执行控制器方法调用之后,且在返回ModelAndView之前执行(即返回视图渲染之前,可对ModelAndView进行修改)
    - afterCompletion方法:该方法在执行完控制器之后执行。可进行一些资源清理,日志记录等操作。

  2. 实现WebRequestInterceptor接口
    WebRequestInterceptor也通过定义了三个方法来拦截的。但这三个方法都传递同一个参数WebRequest。什么是WebRequest呢?它也是Spring定义的一个接口,定义的方法基本与HttpServletRequest方法一样。三个方法如下:
    - preHandle(WebRequest request):与HandlerInterceptor中的不同点在于该方法的返回值是void,所以我们一般用它来进行资源的准备工作
    - post Handle(WebRequest request):在Controller调用之后,视图返回被渲染之前被调用。
    - afterCompletion(WebRequest request,Exception ex):在视图返回被渲染之后执行。

拦截器的执行流程
一个拦截器的情况
springMVC拦截器
多个拦截器的情况
springMVC拦截器

拦截器的配置
只需在Spring的类加载配置文件中添加mvc:interceptor标签对,在该标签对中配置拦截器,可起到全局拦截器的作用。

<!-- 配置拦截器信息 -->
    <mvc:interceptors>
    	<bean class="***">//使用bean直接定义在<mvc:interceptors>内的拦截器可拦截所有请求
    	//定义多个拦截器,顺序执行
		<mvc:interceptor>
		    <mvc:mapping path="/**"/>   <!--表示拦截器拦截的路径,"/**"表示拦截所有路径-->
		    <mvc:exclude-mapping path=""/>  <!-- 表示不需要拦截的路径 -->
		    <bean class="***"/>
		</mvc:interceptor>        
    </mvc:interceptors>

我用拦截器实现了一个简单的用户登录的权限验证:
简单用户登录权限验证

springMVC拦截器springMVC拦截器 weixin_18711369382 发布了17 篇原创文章 · 获赞 0 · 访问量 221 私信 关注
上一篇:http请求


下一篇:如何通过Web请求在C#中编辑请求主机标头?