定義攔截器,實現HandlerInterceptor接口。接口中提供三個方法。
1 package cn.itcast.ssm.interceptor; 2 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse; 5 6 import org.springframework.web.servlet.HandlerInterceptor; 7 import org.springframework.web.servlet.ModelAndView; 8 9 public class HandlerInterceptor1 implements HandlerInterceptor { 10 11 12 //進入 Handler方法之前執行 13 //用於身份認證、身份授權 14 //比如身份認證,如果認證通過表示當前用戶沒有登陸,需要此方法攔截不再向下執行 15 @Override 16 public boolean preHandle(HttpServletRequest request, 17 HttpServletResponse response, Object handler) throws Exception { 18 19 System.out.println("HandlerInterceptor1...preHandle"); 20 21 //return false表示攔截,不向下執行 22 //return true表示放行 23 return true; 24 } 25 26 //進入Handler方法之后,返回modelAndView之前執行 27 //應用場景從modelAndView出發:將公用的模型數據(比如菜單導航)在這里傳到視圖,也可以在這里統一指定視圖 28 @Override 29 public void postHandle(HttpServletRequest request, 30 HttpServletResponse response, Object handler, 31 ModelAndView modelAndView) throws Exception { 32 33 System.out.println("HandlerInterceptor1...postHandle"); 34 35 } 36 37 //執行Handler完成執行此方法 38 //應用場景:統一異常處理,統一日志處理 39 @Override 40 public void afterCompletion(HttpServletRequest request, 41 HttpServletResponse response, Object handler, Exception ex) 42 throws Exception { 43 44 System.out.println("HandlerInterceptor1...afterCompletion"); 45 } 46 47 }
配置攔截器 :springmvc配置類似全局的攔截器,springmvc框架將配置的類似全局的攔截器注入到每個HandlerMapping中。
1 <!--攔截器 --> 2 <mvc:interceptors> 3 <!--多個攔截器,順序執行 --> 4 <!-- 登陸認證攔截器 --> 5 <mvc:interceptor> 6 <mvc:mapping path="/**"/> 7 <bean class="cn.itcast.ssm.interceptor.LoginInterceptor"></bean> 8 </mvc:interceptor> 9 <mvc:interceptor> 10 <!-- /**表示所有url包括子url路徑 --> 11 <mvc:mapping path="/**"/> 12 <bean class="cn.itcast.ssm.interceptor.HandlerInterceptor1"></bean> 13 </mvc:interceptor> 14 <mvc:interceptor> 15 <mvc:mapping path="/**"/> 16 <bean class="cn.itcast.ssm.interceptor.HandlerInterceptor2"></bean> 17 </mvc:interceptor> 18 </mvc:interceptors>
