SpringMVC(六) 攔截器和使用者登入校驗

z1340954953發表於2018-06-13

SpringMVC處理器攔截器

類似於servlet的filter過濾器

* 攔截器定義

public class HandlerInterceptor1 implements HandlerInterceptor {
	/**
	 * 處理器方法返回檢視後呼叫
	 * 可以用來記錄日誌,並且捕獲異常資訊
	 */
	@Override
	public void afterCompletion(HttpServletRequest req,
			HttpServletResponse rsp, Object arg2, Exception arg3)
			throws Exception {
		System.out.println("afterCompletion1..........");
	}
	/**
	 * 處理器方法執行後但是沒有返回檢視呼叫
	 * 這裡可以在返回model前,對模型資料進行加工
	 */
	@Override
	public void postHandle(HttpServletRequest req, HttpServletResponse rsp,
			Object arg2, ModelAndView arg3) throws Exception {
		System.out.println("postHandle1............");
	}
	/**
	 * 處理器方法呼叫前呼叫
	 * true:表示繼續執行 false:表示請求被攔截
	 * 這裡可以做使用者登入校驗
	 */
	@Override
	public boolean preHandle(HttpServletRequest req, HttpServletResponse rsp,
			Object arg2) throws Exception {
		System.out.println("preHandle1............");
		return true;
	}

}

HanderInterceptor2是上面的複製檔案,列印的為xx2...........

* xml中配置攔截器

<!-- 配置攔截器 -->
	<mvc:interceptors>
		<mvc:interceptor>
		 <!-- 所有請求進入攔截器1 -->
		 <mvc:mapping path="/**"/>
		 <bean class="cn.bing.handlerInterceptor.HandlerInterceptor1"></bean>
		</mvc:interceptor>
		<mvc:interceptor>
		 <!-- 所有請求進入攔截器2 -->
		 <mvc:mapping path="/**"/>
		 <bean class="cn.bing.handlerInterceptor.HandlerInterceptor2"></bean>
		</mvc:interceptor>
	</mvc:interceptors>

* 任意請求,攔截器的輸出

preHandle1............
preHandle2............
postHandle2............
postHandle1............
afterCompletion2..........
afterCompletion1..........

說明prehandle方法按照定義的順序呼叫,postHandle,afterCompletion方法按照定義逆序呼叫

* 將攔截器1的prehandle方法改為false,後面的仍然是true

preHandle1............

prehandle返回false,只會執行當前prehandle的方法,後面的攔截器不執行,並且不會執行controller方法

* 將攔截器2的prehandle方法修改返回為false,前面的改為false

preHandle1............
preHandle2............
afterCompletion1..........

從結果看出,攔截器2prehandle方法改為false後,攔截器1的postHandler不會執行,並且攔截器2的postHandler不執行,afterCompletion1不執行

結論:

postHandler 在所有攔截器返回成功才去呼叫

* afterCompletion方法只有perhandle方法返回true才去呼叫

使用者登入校驗

在攔截器的prehandle方法裡面校驗session存在,不存在,重定向到登入頁面


相關文章