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

筆記

一、深刻SpringBoot2.x過濾器Filter和使用Servlet3.0配置自定義Filter實戰(核心知識)
    簡介:講解SpringBoot裏面Filter講解和使用Servlet3.0配置自定義Filter實戰
        
        filter簡單理解:人--->檢票員(filter)---> 景點

        一、SpringBoot啓動默認加載的Filter 
            characterEncodingFilter
            hiddenHttpMethodFilter
            httpPutFormContentFilter
            requestContextFilter
                
        二、Filter優先級

            Ordered.HIGHEST_PRECEDENCE
            Ordered.LOWEST_PRECEDENCE

            低位值意味着更高的優先級 Higher values are interpreted as lower priority
            自定義Filter,避免和默認的Filter優先級同樣,否則會衝突

            註冊Filter的bean FilterRegistrationBean
            同模塊裏面有相關默認Filter
                web->servlet->filter


        三、自定義Filter
            1)使用Servlet3.0的註解進行配置
            2)啓動類裏面增長 @ServletComponentScan,進行掃描
            3)新建一個Filter類,implements Filter,並實現對應的接口
            4) @WebFilter 標記一個類爲filter,被spring進行掃描 
                urlPatterns:攔截規則,支持正則

            6)控制chain.doFilter的方法的調用,來實現是否經過放行
               不放行,web應用resp.sendRedirect("/index.html");
                場景:權限控制、用戶登陸(非前端後端分離場景)等
            

        一、官網地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners
 html

開始

啓動應用。查看啓動日誌

這是springboot的默認過濾器

mapping是映射。包括咱們本身寫的

動態加載

異常處理ControllerAdvice





Ordered就是一個接口。

裏面有兩個常量。Integer的最大值和最小值

裏面還有個geteOrder方法就是獲取它 的優先級



這裏來看FilterRegistrationBean。點進去查看源碼。FilterRegistrationBean這是一個註冊Filter的Bean


在springboot的包下

這些是默認的Filter



隨便打開一個默認的Filter

經過getOrder方法返回上面的order的優先級別

再去看他的上一級

上一級裏面有個比較重要的知識點。doFilter,咱們在自定義過濾器的時候會講解doFilter

filter必須依賴Servlet容器,主要的機制是基於一個回調機制前端

自定義Filter

使用servlet3.0的註解配置咱們的自定義Filter
三、自定義Filter
            1)使用Servlet3.0的註解進行配置
            2)啓動類裏面增長 @ServletComponentScan,進行掃描
            3)新建一個Filter類,implements Filter,並實現對應的接口
            4) @WebFilter 標記一個類爲filter,被spring進行掃描 
                urlPatterns:攔截規則,支持正則

            6)控制chain.doFilter的方法的調用,來實現是否經過放行
               不放行,web應用resp.sendRedirect("/index.html");
                場景:權限控制、用戶登陸(非前端後端分離場景)等

新建了一個Filter模塊

實現Filter接口。

裏面有是哪一個方法須要去實現

init方法是容器啓動的時候進行加載

doFilter:核心的處理業務的方法


xdclss等於接收的參數username那麼就放行,不然直接return返回

destory在容器銷燬的時候進行調用。

web

配置註解,加入spring進行管理

@WebFilter是spring3.0的一個註解。
urlPatterns:要攔截的url。 /*是攔截全部的請求。這裏配置的是/api/*攔截api開頭的下面的全部請求。

固然咱們也能夠攔截例如不一樣模塊下的請求。這裏前面加上admin就是攔截admin模塊下的全部請求。

filterName這裏暫時先用不到。這裏隨便寫一個名稱就能夠了。

4) @WebFilter 標記一個類爲filter,被spring進行掃描 
                urlPatterns:攔截規則,支持正則


    6)控制chain.doFilter的方法的調用,來實現是否經過放行
               不放行,web應用resp.sendRedirect("/index.html");
                場景:權限控制、用戶登陸(非前端後端分離場景)等spring

啓動類須要加註解@ServletComponentScan

啓動測試


查看啓動日誌。咱們自定義的Filter已經初始化了。

上面幾個是默認的Filter。下面的loginFilter是咱們自定義的


訪問接口測試一下。只有api開頭的纔會被攔截

訪問這個地址。頁面沒有任何輸出。

可是後臺輸出了。

咱們傳遞一個username過去。username等於xdclass就放行了。

後端

快速建立一個新的方法去測試



熱加載的時候,從新加載了容器。Filter的destory方法被調用了。


從新加載的時候仍是會初始化Filter





換一個錯誤的username值。什麼都沒有返回

加一個跳轉。而後強制return

靜態頁面在這裏

改爲username爲aaa

跳轉到了index頁面


官網的地址對過濾器進行說明
一、官網地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners

Servlet3.0的新特性。是新發布的 尚未大虧摸的應用。裏面還有異步


 api

相關文章
相關標籤/搜索