springMVC攔截器
阿新 • • 發佈:2020-07-14
Interceptor的主要作用是攔截使用者的請求並進行相應的處理。比如通過它來進行許可權驗證,或者是來判斷使用者是否登陸等。
自定義實現一個攔截器的步驟
1.定義一個實現 HandlerInterceptor 介面 的類
public class MyInterceptor1 implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("MyInterceptor執行了。。。。"); return true; } }
HandlerInterceptor 介面類介紹:
這個介面中有三個預設方法:preHandle、postHandle、afterCompletion
public interface HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { } }
preHandle:在業務處理器處理請求之前被呼叫,通俗的講就是在瀏覽器請求中所請求的controller層的方法前會執行此方法
注意:當此方法返回true時,並且當前專案只配置了當前這一個攔截器,那麼就會執行請求中呼叫的controller層中的方法。
若此方法返回true,但是當前專案配置多個攔截器,則當前攔截器的preHandle方法執行後會進入其他攔截器執行其中的preHandle方法,直到所有攔截器都執行完其中preHandle方法,並且所有攔截器都是返回true,才會執行請求中呼叫的controller層中的方法。
若返回false,我們就可以通過HttpServletRequest 物件進行請求轉發,或者通過HttpServletResponse 進行重定向,跳轉到指定頁面。
postHandle:在業務處理器處理請求完成之後,生成檢視之前執行,就是在瀏覽器請求中所請求的controller層的方法後會執行此方法
afterCompletion:在DispatcherServlet完全處理完請求之後被呼叫,可用於清理資源 ,就是在跳轉到jsp頁面後會執行此方法。
2.在 springmvc 的配置檔案中 ,新增攔截器配置
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/user/**"/> <bean class="com.xj.controller.interceptor.MyInterceptor1"></bean> </mvc:interceptor> </mvc:interceptors>