HandlerInterceptorAdapter或HandlerInterceptor的使用
擼了今年阿里、頭條和美團的面試,我有一個重要發現.......>>>
- Spring攔截器
- HandlerInterceptorAdapter需要繼承,HandlerInterceptor需要實現
- 可以作為日志記錄和登錄校驗來使用
- 建議使用HandlerInterceptorAdapter,因為可以按需進行方法的覆蓋。
主要為3種方法:
- preHandle:攔截于請求剛進入時,進行判斷,需要boolean返回值,如果返回true將繼續執行,如果返回false,將不進行執行。一般用于登錄校驗。
- postHandle:攔截于方法成功返回后,視圖渲染前,可以對modelAndView進行操作。
- afterCompletion:攔截于方法成功返回后,視圖渲染前,可以進行成功返回的日志記錄。
簡介
SpringWebMVC的處理器攔截器,類似于Servlet開發中的過濾器Filter,用于處理器進行預處理和后處理。
應用場景
1、日志記錄,可以記錄請求信息的日志,以便進行信息監控、信息統計等。
2、權限檢查:如登陸檢測,進入處理器檢測是否登陸,如果沒有直接返回到登陸頁面。
3、性能監控:典型的是慢日志
?
攔截器適配器HandlerInterceptorAdapter
有時候我們可能只需要實現三個回調方法中的某一個,如果實現HandlerInterceptor接口的話,三個方法必須實現,不管你需不需要,此時spring提供了一個HandlerInterceptorAdapter適配器(種適配器設計模式的實現),允許我們只實現需要的回調方法。
這樣在我們業務中比如要記錄系統日志,日志肯定是在afterCompletion之后記錄的,否則中途失敗了,也記錄了,那就扯淡了。一定是程序正常跑完后,我們記錄下那些對數據庫做個增刪改的操作日志進數據庫。所以我們只需要繼承HandlerInterceptorAdapter,并重寫afterCompletion一個方法即可,因為preHandle默認是true。
運行流程總結如下:
1、攔截器執行順序是按照Spring配置文件中定義的順序而定的。
2、會先按照順序執行所有攔截器的preHandle方法,一直遇到return false為止,比如第二個preHandle方法是return false,則第三個以及以后所有攔截器都不會執行。若都是return true,則按順序加載完preHandle方法。
3、然后執行主方法(自己的controller接口),若中間拋出異常,則跟return false效果一致,不會繼續執行postHandle,只會倒序執行afterCompletion方法。
4、在主方法執行完業務邏輯(頁面還未渲染數據)時,按倒序執行postHandle方法。若第三個攔截器的preHandle方法return false,則會執行第二個和第一個的postHandle方法和afterCompletion(postHandle都執行完才會執行這個,也就是頁面渲染完數據后,執行after進行清理工作)方法。(postHandle和afterCompletion都是倒序執行)
?
總結
以上是生活随笔為你收集整理的HandlerInterceptorAdapter或HandlerInterceptor的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot 实现策略模式
- 下一篇: springcloud 中的zuul整合