小D課堂 - 零基礎入門SpringBoot2.X到實戰_第6節 SpringBoot攔截器實戰和 Servlet3.0自定義Filter、Listener_2七、SpringBoot2.X攔截器實戰

筆記

、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和攔截器的區別


    Filter
        是基於函數回調 doFilter(),而Interceptor則是基於AOP思想
        Filter在只在Servlet先後起做用,而Interceptor夠深刻到方法先後、異常拋出先後等

        依賴於Servlet容器即web應用中,而Interceptor不依賴於Servlet容器因此能夠運行在多種環境。
    
        在接口調用的生命週期裏,Interceptor能夠被屢次調用,而Filter只能在容器初始化時調用一次。
        
        Filter和Interceptor的執行順序
         
        過濾前->攔截前->action執行->攔截後->過濾後
 post

相關文章
相關標籤/搜索