SpringMVC拦截器

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

   

   

   

   

   

   

   

SpringMVC 拦截器

   

   

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

调用 HandlerMapping 查找 Handler,HandlerMapping 会

DispatcherServlet 返回 HandlerExecutionChain,其中包

含了 HandlerHandlerInterceptor[]

   

   

   

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

中定义了 三个方法:

   

1preHandle()

   

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

前置拦截

   

   

2postHandle()

   

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

后置拦截

   

   

3afterCompletion()

   

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

最终拦截

   

   

   

注意:只有 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>

   

   

   

   

   

关于源码:

   

可以从 DispatcherServletdoDispatch() 方法看起

   

   

   

 参考链接:

   

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

 

 

   

   

   

   

【made by siwuxie095】

原文地址:https://www.cnblogs.com/siwuxie095/p/8489879.html