您的位置:首页 > 编程语言 > Java开发

SpringMVC拦截器

2018-03-01 18:04 260 查看

----------------------siwuxie095

   

   

   

   

   

   

   

SpringMVC 拦截器

   

   

当用户发送请求到 DispatcherServlet,DispatcherServlet 会

调用 HandlerMapping 查找 Handler,HandlerMapping 会

向 DispatcherServlet 返回 HandlerExecutionChain,其中包

含了 Handler 和 HandlerInterceptor[]

   

   

   

HandlerInterceptor 正是 SpringMVC 中的拦截器,在该接口

中定义了 三个方法:

   

(1)preHandle()

   

即 前置方法,在调用 Handler 之前执行,是顺序执行,可以理解

为 前置拦截

   

   

(2)postHandle()

   

即 后置方法,在调用 Handler 之后执行,是逆序执行,可以理解

为 后置拦截

   

   

(3)afterCompletion()

   

即 完成方法,在视图渲染完成之后执行,是逆序执行,可以理解

为 最终拦截

   

   

   

注意:只有 preHandle() 的返回类型 boolean,postHandle()

和 afterCompletion() 的返回类型都是 void

   

preHandle() 返回 true,表示放行,返回 false,表示不放行

   

   

   

规则:

   

(1)前面的拦截器的 preHandle() 返回 true,即 放行,后面的

拦截器的 preHandle() 才能执行

   

(2)只要有一个拦截器的 preHandle() 返回 false,即 不放行,

所有拦截器的 postHandle() 都不会执行

   

(3)只要当前拦截器的 preHandle() 返回 true,即 放行,那么

当前拦截器的 afterCompletion() 一定会执行

   

   

   

   

   

关于自定义拦截器:

   

要自定义一个拦截器,只需实现 HandlerInterceptor 接口即可,

之后在 SpringMVC 的核心配置文件 dispatcher-servlet.xml 中

配置一下,便可生效

   

   

<!-- 配置自定义拦截器 -->

<mvc:interceptors>

<mvc:interceptor>

 

<!--

** 代表任意多级目录(含 0 个)

 

/**/*.do 表示拦截以 .do 结尾的请求,/** 表示拦截所有的请求

-->

<mvc:mapping path="/**/*.do"/>

<bean class="com.siwuxie095.interceptor.TestInterceptor"/>

 

</mvc:interceptor>

</mvc:interceptors>

   

   

   

   

   

关于源码:

   

可以从 DispatcherServlet 的 doDispatch() 方法看起

   

   

   

 参考链接:

   

参考链接1参考链接2参考链接3参考链接4参考链接5

 

 

   

   

   

   

【made by siwuxie095】

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: