第四十章:Spring MVC框架之攔截器10
阿新 • • 發佈:2018-12-05
第八章 攔截器
攔截器最典型的用法是檢查使用者是否登入,登入後可以執行目標handler方法,未登入則跳轉到登入頁面。這樣的操作要是在每個攔截器內部來寫就太麻煩了,統一提取到攔截器中是明智之舉。
1.HandlerInterceptor介面
①preHandle()方法
簽名:boolean preHandle(HttpServletRequest, HttpServletResponse, Object) 在執行目標handler方法之前執行,如果返回true,則繼續執行後續攔截器和目標handler方法;如果返回false則不執行。注意:返回false時最好藉助轉發或重定向等方式為客戶端提供一個響應頁面。
②postHandle()方法
簽名:void postHandle(HttpServletRequest, HttpServletResponse, Object, ModelAndView) 在執行目標handler方法之後、渲染檢視之前執行。
③afterCompletion()方法
在渲染檢視之後、返回響應之前執行。
2.HandlerInterceptorAdapter類
實現HandlerInterceptor介面需要把所有抽象方法都實現,而繼承HandlerInterceptorAdapter類則可以有選擇的重寫需要的方法,更加便捷,推薦使用。
3.配置方式
①攔截所有請求
<mvc:interceptors> <bean class="com.interceptor.FirstInterceptor"/> <bean class="com.interceptor.SecondInterceptor"/> </mvc:interceptors>
②精確指定攔截的請求
<mvc:interceptors> <bean class="com.interceptor.FirstInterceptor"/> <bean class="com.interceptor.SecondInterceptor"/> <mvc:interceptor> <mvc:mapping path="/*"/> <mvc:exclude-mapping path="/specailPath"/> <bean class="com.interceptor.SpecialInterceptor"/> </mvc:interceptor> </mvc:interceptors>
4.多個攔截器的執行順序
①按正序依次呼叫preHandle()方法 ②執行目標handler方法 ③按反序呼叫postHandle()方法 ④按反序呼叫afterCompletion()方法