javascript
拦截器---SpringMVC学习笔记(十四)
定義
Spring Web MVC 的處理器攔截器類似于Servlet 開發(fā)中的過濾器Filter,用于對處理器進行預(yù)處理和后處理。
第一步:攔截器的定義
定義一個實現(xiàn)HandlerInterceptor接口的類:
package com.huihui.handlerIntercepter;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;public class HandlerIntercepter1 implements HandlerInterceptor{//進入handler方法之前執(zhí)行//應(yīng)用場景:用于身份認(rèn)證和身份授權(quán)//比如身份認(rèn)證:如果認(rèn)證不通過表示當(dāng)前用戶沒有登陸,需要此方法攔截不再繼續(xù)往下執(zhí)行@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object obj) throws Exception {return true;}//進入handler方法之后并且在返回modelAndView之前執(zhí)行//應(yīng)用場景從modelAndView出發(fā):將公用的模型數(shù)據(jù)(比如菜單導(dǎo)航)在這里傳到視圖,也可以在這里統(tǒng)一指定視圖@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response,Object obj, ModelAndView modelAndView) throws Exception {}//執(zhí)行完成handler之后執(zhí)行//應(yīng)用場景:統(tǒng)一異常處理,統(tǒng)一日志處理@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object obj, Exception e)throws Exception {} }第二步:攔截器配置
在springmvc.xml文件中配置攔截器。
第一種:針對某種mapping配置攔截器(比較少用)
<beanclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"><property name="interceptors"><list><ref bean="handlerInterceptor1"/><ref bean="handlerInterceptor2"/></list></property> </bean><bean id="handlerInterceptor1" class="springmvc.intercapter.HandlerInterceptor1"/><bean id="handlerInterceptor2" class="springmvc.intercapter.HandlerInterceptor2"/>第二種:針對所有mapping配置全局?jǐn)r截器(常用)
<!--攔截器 --> <mvc:interceptors><!--多個攔截器,順序執(zhí)行 --><mvc:interceptor><!-- /**會攔截所有的url(包括url的子路徑)/* 會攔截所有的url(不包括url的子路徑)--><mvc:mapping path="/**"/><bean class="com.huihui.handlerIntercepter.HandlerIntercepter1"></bean></mvc:interceptor><mvc:interceptor><mvc:mapping path="/**"/><bean class="com.huihui.handlerIntercepter.HandlerIntercepter2"></bean></mvc:interceptor> </mvc:interceptors>第三步:測試攔截器
第一種測試:兩個攔截器都放行
也就是將兩個攔截器中的preHandle方法最后都return true。
運行流程:
總結(jié):
preHandle方法按攔截器配置的順序執(zhí)行,postHandle和afterCompletion方法按攔截器配置的逆向順序執(zhí)行。
第二種測試:攔截器1放行,攔截器2不放行
也就是將攔截器1的preHandle方法return true,攔截器2的preHandle方法return false。
運行流程:
總結(jié):
攔截器1放行,攔截器2 preHandle才會執(zhí)行。
攔截器2 preHandle不放行,攔截器2 postHandle和afterCompletion不會執(zhí)行。
只要有一個攔截器不放行,postHandle不會執(zhí)行。
第三種測試:攔截器1和攔截器2都不放行
也就是將攔截器1和攔截器2的preHandle方法都return false。
運行流程:
總結(jié):
攔截器1 preHandle不放行,postHandle和afterCompletion不會執(zhí)行。
攔截器1 preHandle不放行,攔截器2不執(zhí)行。
總結(jié)
以上是生活随笔為你收集整理的拦截器---SpringMVC学习笔记(十四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RESTful---SpringMVC学
- 下一篇: Spring MVC 参数自动绑定Lis