SpringMVC-Intercepter攔截器

Intercepter

Spring Web MVC的處理器攔截器,類似于Servlet開發中的過濾器Filter,用于對處理器進行預處理和后處理,本質上也會AOP,把符合橫切關注點的所有功能都可以放入攔截器實現,Intercepter面向的是頁面處理Handler(Controller),允許開發人員自定義某一請求路徑上的處理程序執行鏈。

應用場景
  • 日志記錄:記錄請求信息的日志,以便進行信息監控、信息統計、計算PV(Page View)等。

  • 權限檢查:如登錄檢測,進入處理器檢測檢測是否登錄,如果沒有直接返回到登錄頁面;

  • 性能監控:有時候系統在某段時間莫名其妙的慢,可以通過攔截器在進入處理器之前記錄開始時間,在處理完后記錄結束時間,從而得到該請求的處理時間(如果有反向代理,如apache可以自動記錄);

  • 通用行為:讀取cookie得到用戶信息并將用戶對象放入請求,從而方便后續流程使用,還有如提取Locale、Theme信息等,只要是多個處理器都需要的即可使用攔截器實現。

HandlerInterceptor 接口
HandlerInterceptor 處理流程

正常處理流程



中斷流程


說明:

  1. 不同攔截器的執行順序

不同攔截器根據注冊到攔截器注冊器上的先后順序進行攔截

  1. 不同攔截器的相同handler的執行順序
  • preHandler:根據注冊順序執行
  • postHanadler:根據preHandler的逆序執行,即先執行的preHandler的攔截器后執行postHandler
  • afterCompletion:同postHanadler,根據preHandler的逆序執行,即先執行的preHandler的攔截器后執行afterCompletion
  1. 同一攔截器不同handler的執行順序

如果preHandler返回true(不管postHanadler的結果,它本身返回值為void類型,也不管Controller是否正常執行完成),則afterCompletion一定會執行,否則afterCompletion不執行

  1. 不同攔截器的preHandler的失敗對其他攔截器的流程影響

本攔截器的preHandler的失敗只影響本攔截器的后續流程,而不影響其他攔截器的執行流程。

攔截器的使用示例

passportInterceptor攔截器的實現



HostHolder類的實現

passportInterceptor攔截器注冊

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,933評論 18 139
  • 姓名: 李小娜 [嵌牛導讀]: SpringMVC 中的Interceptor 攔截器也是相當重要和相當有用的,...
    n184閱讀 3,200評論 0 4
  • 1. 認識攔截器 Spring MVC的攔截器(Interceptor)不是Filter,同樣可以實現請求的預處理...
    郭尋撫閱讀 19,775評論 1 16
  • 前言:一年前看視頻學習這個框架的時候做的筆記。。。現在自己看來覺得還是有點蛋疼。。。想了想還是放上來了,萬一開發要...
    l_sivan閱讀 681評論 0 7
  • 總是不經意的想起你,早晨剛睡醒,晚上臨入眠,它就長在那里。 ——致某人
    此間亂子不語閱讀 213評論 0 0