Spring MVC 攔截器spring
在Spring MVC的配置文件中配置攔截器(這裏配置了兩個攔截器)mvc
<!-- 配置攔截器 --> <mvc:interceptors> <mvc:interceptor> <!-- 配置要攔截的請求 --> <mvc:mapping path="/*"/> <!-- 配置自定義的攔截器 --> <bean class="com.zgz.springmvc.interceptors.FirstInterceptor"></bean> </mvc:interceptor> <mvc:interceptor> <!-- 配置多個攔截器 --> <mvc:mapping path="/*"/> <bean class="com.zgz.springmvc.interceptors.SecondInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
攔截器必須實現HandlerInterceptor接口,該接口定義了三個方法,掌握這三個方法的做用和有多個攔截器時的執行過程便可
多個攔截器時的執行流程圖
兩個攔截器app
public class FirstInterceptor implements HandlerInterceptor { /** * 該方法在目標方法以前調用 * 若該方法返回值爲true,則繼續調用後續的攔截器和目標方法 * 若返回值爲false,則不會調用後續的攔截器和目標方法 * * 能夠考慮作權限,日誌,事務等 * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println("preHandle: "); return true; } /** * 調用目標方法以後,但在渲染視圖以前 * 能夠對請求域中的屬性或視圖作出修改 * @throws Exception */ @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println("postHandle: "); } /*** * 渲染試圖以後被調用 * 能夠釋放資源 * @throws Exception */ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println("afterCompletion: "); } }
public class SecondInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println("preHandle2: "); return true; } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println("postHandle2: "); } @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println("afterCompletion2: "); } }
執行結果ide