SpringMVC-Intercepter攔截器

Intercepter

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

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

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

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

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

HandlerInterceptor 接口
HandlerInterceptor 處理流程

正常處理流程



中斷流程


說明:

  1. 不同攔截器的執(zhí)行順序

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

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

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

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

本攔截器的preHandler的失敗只影響本攔截器的后續(xù)流程,而不影響其他攔截器的執(zhí)行流程。

攔截器的使用示例

passportInterceptor攔截器的實現(xiàn)



HostHolder類的實現(xiàn)

passportInterceptor攔截器注冊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容