####1.鏈接器簡介 springMVC攔截器相似於servlet中的過濾器filter,用於對處理器(controller)進行預處理和後處理。
####2.常見應用場合
1.日誌記錄:記錄請求信息,便於對請求信息進行監控、統計等。
2.權限檢查:例如登錄檢測,若是沒有登錄則直接跳往登錄頁面。
3.通用行爲:讀取cookie獲得用戶信息,存儲起來,方便程序的後續使用。
攔截器的本質也是AOP,換句話說,符合橫切關注點的全部功能均可以放在攔截器實現。
####3.配置信息
在spring-mvc的配置文件中添加以下代碼前端
<!-- 攔截器 --> <mvc:interceptors> <mvc:interceptor> <!-- 容許全部的請求經過 --> <mvc:mapping path="/**"/> <!-- 哪些不被攔截 --> <mvc:exclude-mapping path=""/> <bean class="com.test.spring.interceptors.MyInterceptors"></bean> </mvc:interceptor> </mvc:interceptors>
新建立一個bean,實現HandlerInterceptor接口,以下java
package com.test.spring.interceptors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class MyInterceptors implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO Auto-generated method stub return false; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub } }
####4.適配器方法介紹
1.preHandle:預處理方法
全部的請求都是先到這裏,返回true時,再去controller;在這裏能夠獲取到request的全部信息,一般咱們會作 登錄檢查。
2.postHandle:後處理方法
處理器執行完請求信息後須要走這裏(可是尚未渲染視圖/沒有返回json數據),在這裏咱們能夠經過modelAndView對模型數據進行處理。
3.afterCompletion:請求/響應完畢
返回信息了,視圖顯示出來了/json數據返給前端了。在這裏通常作一些資源清理的工做,相似於try-catch-finally中的finally同樣。
####5.運行示例web
攔截器輸出:處理器前------- -----進入controller-->service-->serviceImpl-->獲取數據-->..>controller -----controller 執行retuen後 攔截器輸出:處理器後------- -----Successfully completed request,說明請求完成,此時視圖已經顯示出來了 攔截器輸出:處理器返回信息後------