、SpringBoot2.X自定義攔截器實戰及新舊配置對比(核心知識)
簡介: 講解攔截器使用,Spingboot2.x新版本配置攔截攔截器和舊版本SpringBoot配置攔截器區別講解
一、@Configuration
繼承WebMvcConfigurationAdapter(SpringBoot2.X以前舊版本)
SpringBoot2.X 新版本配置攔截器 implements WebMvcConfigurer
二、自定義攔截器 HandlerInterceptor
preHandle:調用Controller某個方法以前
postHandle:Controller以後調用,視圖渲染以前,若是控制器Controller出現了異常,則不會執行此方法
afterCompletion:無論有沒有異常,這個afterCompletion都會被調用,用於資源清理
三、按照註冊順序進行攔截,先註冊,先被攔截
攔截器不生效常見問題:
1)是否有加@Configuration
2)攔截路徑是否有問題 ** 和 *
3)攔截器最後路徑必定要 「/**」, 若是是目錄的話則是 /*/
Filter
是基於函數回調 doFilter(),而Interceptor則是基於AOP思想
Filter在只在Servlet先後起做用,而Interceptor夠深刻到方法先後、異常拋出先後等
依賴於Servlet容器即web應用中,而Interceptor不依賴於Servlet容器因此能夠運行在多種環境。
在接口調用的生命週期裏,Interceptor能夠被屢次調用,而Filter只能在容器初始化時調用一次。
Filter和Interceptor的執行順序
過濾前->攔截前->action執行->攔截後->過濾後java
自定義一個攔截器 新舊版本的區別
以前的代碼測試會對當前的測試 有干擾,因此先註釋掉。
舊版本的,繼承WebMvcConfigurerAdapter
能夠去重寫裏面的方法
web
java8支持接口裏面有默認方法的實現
實現接口WebMvcConfigurer。重寫裏面的方法,addInterceptors
定義login的攔截器
有三個方法須要重寫
例如能夠在進入controller以前驗證token的值
註冊剛纔加的LoginInterceptor。並制定攔截的路徑
攔截的路徑
controller的測試方法
啓動測試
舊的攔截器先註釋掉。註解去掉就不會被Spring掃描了
從新啓動測試
訪問返回一個json格式的數據
輸出的方法名改一下
輸出的requestDestoryed是咱們以前定義的監聽器
註解攔截器注意的地方。要麼是類上面沒加註解,要麼就是攔截的路徑設置的有問題
攔截的路徑通常子在結尾的時候加** 表示全部的。/*是匹配子文件夾
攔截全部能夠配置爲/**
能夠鏈式調用排除的攔截路徑exclude
不攔截的配置
json
兩個攔截器怎麼去註冊呢?
寫另一個攔截器
註冊攔截器,這樣就會先執行第一個攔截器,再執行第二個攔截器
啓動應用
請求接口
函數
Filter
是基於函數回調 doFilter(),而Interceptor則是基於AOP思想
Filter在只在Servlet先後起做用,而Interceptor夠深刻到方法先後、異常拋出先後等
依賴於Servlet容器即web應用中,而Interceptor不依賴於Servlet容器因此能夠運行在多種環境。
在接口調用的生命週期裏,Interceptor能夠被屢次調用,而Filter只能在容器初始化時調用一次。
Filter和Interceptor的執行順序
過濾前->攔截前->action執行->攔截後->過濾後
post