一、深刻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容器,主要的機制是基於一個回調機制前端
使用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
@WebFilter是spring3.0的一個註解。
urlPatterns:要攔截的url。 /*是攔截全部的請求。這裏配置的是/api/*攔截api開頭的下面的全部請求。
固然咱們也能夠攔截例如不一樣模塊下的請求。這裏前面加上admin就是攔截admin模塊下的全部請求。
filterName這裏暫時先用不到。這裏隨便寫一個名稱就能夠了。
4) @WebFilter 標記一個類爲filter,被spring進行掃描
urlPatterns:攔截規則,支持正則
6)控制chain.doFilter的方法的調用,來實現是否經過放行
不放行,web應用resp.sendRedirect("/index.html");
場景:權限控制、用戶登陸(非前端後端分離場景)等spring
查看啓動日誌。咱們自定義的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