Spring MVC框架:第十章:攔截器
攔截器
攔截器最典型的用法是檢查用戶是否登錄,登錄后可以執(zhí)行目標handler方法,未登錄則跳轉(zhuǎn)到登錄頁面。這樣的操作要是在每個攔截器內(nèi)部來寫就太麻煩了,統(tǒng)一提取到攔截器中是明智之舉。
1.HandlerInterceptor接口
①preHandle()方法
簽名:boolean preHandle(HttpServletRequest, HttpServletResponse, Object)
在執(zhí)行目標handler方法之前執(zhí)行,如果返回true,則繼續(xù)執(zhí)行后續(xù)攔截器和目標handler方法;如果返回false則不執(zhí)行。注意:返回false時最好借助轉(zhuǎn)發(fā)或重定向等方式為客戶端提供一個響應(yīng)頁面。
②postHandle()方法
簽名:void postHandle(HttpServletRequest, HttpServletResponse, Object, ModelAndView) 在執(zhí)行目標handler方法之后、渲染視圖之前執(zhí)行。
③afterCompletion()方法
在渲染視圖之后、返回響應(yīng)之前執(zhí)行。
2.HandlerInterceptorAdapter類
實現(xiàn)HandlerInterceptor接口需要把所有抽象方法都實現(xiàn),而繼承HandlerInterceptorAdapter類則可以有選擇的重寫需要的方法,更加便捷,推薦使用。
3.配置方式
①攔截所有請求
mvc:interceptors
</mvc:interceptors>
②精確指定攔截的請求
mvc:interceptors
mvc:interceptor
<mvc:mapping path="/*"/>
<mvc:exclude-mapping path="/specailPath"/>
</mvc:interceptor>
</mvc:interceptors>
4.多個攔截器的執(zhí)行順序
①按正序依次調(diào)用preHandle()方法 ②執(zhí)行目標handler方法 ③按反序調(diào)用postHandle()方法 ④按反序調(diào)用afterCompletion()方法