什么是攔截器
攔截器通常一般指的是通過攔截從瀏覽器發往服務器的一些請求來完成某些功能的一段程序代碼
一般在一個請求發生之前,發生時,發生后我們都可以對請求進行攔截
攔截器可以做什么
攔截器可以用於權限驗證、解決亂碼、操作日志記錄、性能監控、異常處理等
自定義攔截器
可以通過繼承Spring框架中的HandlerInterceptorAdapter類,然后重寫preHandle,postHandle,afterCompletion三個方法,在三個方法中寫我們自己要想實現的業務邏輯代碼.
1 |
/** |
a) public boolean preHandle(HttpServletRequest request,HttpServletResponse response,
Object handler) throws Exception
該方法在action執行前執行,可以實現對數據的預處理,比如:編碼、防重復提交安全控制等。
如果方法返回true,則繼續執行action。返回false則攔截請求
b) public void postHandle(HttpServletRequest request,HttpServletResponse response,
Object handler,ModelAndView modelAndView) throws Exception
該方法在action執行后,生成視圖前執行。在這里,我們有機會修改視圖層數據。
c) public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception
最后執行,通常用於釋放資源,處理異常。我們可以根據ex是否為空,來進行相關的異常處理。
注冊攔截器
在xml文件中配置:
1 |
<mvc:interceptors> |
當有多個攔截器的時候可以寫多個bean
當我們只想攔截部分指定請求時:
1 |
<mvc:interceptors> |
多個攔截器
xml配置:
1 |
<mvc:interceptors> |
當配置有多個攔截器的時候,會按攔截器順序執行preHandle方法,然后再倒序執行postHandle和afterCompletion方法。
其他實現方式
- 實現接口
implements HandlerInterceptor
- 實現接口
implements WebRequestInterceptor
注冊攔截器方法不變
與過濾器的區別
1.過濾器是依賴於Servlet容器,基於回調函數,Intercepto依賴與框架,基於反射機制
2.過濾器的過濾范圍更大,還可以過濾一些靜態資源,攔截器只攔截請求