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