SpringBoot系列(十二)過濾器配置詳解

来源:https://www.cnblogs.com/swzx-1213/archive/2020/05/01/12814734.html
-Advertisement-
Play Games

SpringBoot(十二)過濾器詳解 往期精彩推薦 "SpringBoot系列(一)idea新建Springboot項目" "SpringBoot系列(二)入門知識" "springBoot系列(三)配置文件詳解" "SpringBoot系列(四)web靜態資源配置詳解" "SpringBoot系 ...


SpringBoot(十二)過濾器詳解

往期精彩推薦
SpringBoot系列(一)idea新建Springboot項目

SpringBoot系列(二)入門知識

springBoot系列(三)配置文件詳解

SpringBoot系列(四)web靜態資源配置詳解

SpringBoot系列(五)Mybatis整合完整詳細版

SpringBoot系列(六)集成thymeleaf詳解版

Springboot系列(七) 集成介面文檔swagger,使用,測試

SpringBoot系列(八)分分鐘學會Springboot多種解決跨域方式

SpringBoot系列(九)單,多文件上傳的正確姿勢

SpringBoot系列(十)優雅的處理統一異常處理與統一結果返回

SpringBoot系列(十一)攔截器與攔截器鏈的配置與使用詳解,你知道多少?

目錄

1. 過濾器簡介

1. 過濾器是什麼?

Filter也稱之為過濾器,過濾器是對數據進行過濾,預處理。開發人員可以對客戶端提交的數據進行過濾處理,比如敏感詞,也可以對服務端返回的數據進行處理。還有就是可以驗證用戶的登錄情況,許可權驗證,對靜態資源進行訪問控制,沒有登錄或者是沒有許可權時是不能讓用戶直接訪問這些資源的。類似的過濾器還有很多的功能,比如說編碼,壓縮服務端給客戶端返回的各種數據,等等。

2. 過濾器的運作原理?

 過濾器這麼牛逼,那麼它的運作原理是什麼呢?
 java為我們提供了一個Filter介面,我們只需要實現這個介面就能實現自定義過濾器,然後添加一些必要的配置讓過濾器生效。過濾器只能初始化一次,並且過濾器只會在項目停止或者是重新部署的時候才銷毀。我們可以實現的這個Filter介面,裡面最重要的是一個doFilter方法,當我們編寫好Filter,並配置好對那個URL資源進行攔截時,每一次請求這個資源之前就會調用這個doFilter方法。並且在這個doFilter方法裡面也有著一個FilterChain的對象參數 ,這個對象裡面也有一個doFilter方法,是否調用這個方法決定了這個過濾器是否能調用後面的資源或者是執行後面的過濾器。也就是相當於目標資源。所以在過濾器裡面可以進行一些什麼操作呢?可以在調用目標資源之前,進行許可權等的處理;判斷是否調用目標資源;也可以在調用目標資源之後進行一些響應消息進行處理。

2. 過濾器配置的兩種方法

1. 註解配置

 首先我們定義一個MyFilter 實現Filter介面。重寫裡面的三個方法

@Order(1)
@WebFilter(filterName = "myFilter1",urlPatterns = {"/*"})
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化過濾器");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("進入目標資源之前先乾點啥");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("處理一下服務端返回的response");
    }

    @Override
    public void destroy() {
        System.out.println("過濾器被銷毀了");
    }

代碼說明:

 1.@WebFilter註解,filterName屬性表示filter的名稱,urlPatter表示要攔截的URL資源,可以是一個或者多個。

 2.@Order(1)表示如果有多個攔截器的話就是設置這個攔截器的運行等級,數字越小,越先執行

 3.init()方法只會執行一次,初始化過濾器。

 4.doFilter()核心方法,配置過濾器的邏輯代碼。

 5.destroy()只會在項目停止或者是項目重新部署的時候才會執行。

 配置完上面的之後我們還需要在啟動類加上一個掃描包的註解,開啟包掃描。@ServletComponentScan("com.example.demofilter.filter"),當然你也可以不用寫包的具體地址,不傳參數,但是建議是傳參數,並且這個採參數也可以傳多個的。

 以上就完成了一個Filter的基本配置,運行項目即可看到效果,還有一種非註解形式的配置方式。

2. java配置

 我們可以通過自己定義一個java配置文件,將自定義的Filter 註冊到到FilterRegistrationBean裡面。

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean registFilter(){
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new MyFilter());
        registrationBean.addUrlPatterns("/*");
        registrationBean.setName("Filter1");
        registrationBean.setOrder(1);
        return registrationBean;
    }
}

 這個配置和上面的註解配置類似。上面註解實現的原理也是這樣的,雖然是兩種不同的方法,但是是一樣的原理。

3. 測試編寫與結果

controller代碼編寫

@RestController
@RequestMapping("/Filter")
public class FilterController {
    @RequestMapping("/testFilter")
    public String testFilter(){
        System.out.println("filter執行成功");
        return "filter";
    }
}

 完成之後啟動項目,訪問介面:localhost:8098/Filter/testFilter,觀察控制台運行結果。

 根據之前我們說的,過濾器只會執行一次,然後過濾器也只會在項目停止或者是重新部署的時候才會銷毀,所以我們是看不到銷毀的代碼輸出出來。

4. 總結

 本文先講解了過濾器的一些概念,用途,然後詳細講解了過濾器的在SpringBoot中的配置與使用,我們介紹了兩種配置方法,分別是註解方式與java 代碼的配置。之後進行測試,與結果展示。如果你覺得本文對你有用,可以點個關註哦!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Springboot登錄攔截器 和 swagger框架介面自動生成html文檔 使用開發工具:IDEA 實現步驟如下 1.需導入的依賴如下: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifa ...
  • 這個問題比較常見了,一般是在第一次上傳項目到github或者gitee上會出現。 以前將項目上傳到github的時候出現這個問題,百般查找,找到一個好用的解決辦法,依次輸入以下命令: git pull git pull origin master git pull origin master --a ...
  • Sleuth+Zipkin用來實現分散式系統的鏈路追蹤。 Sleuth組件用於日誌埋點、記錄鏈路數據,Zipkin組件用於展示鏈路數據。 Sleuth的使用 (1)創建消費者、提供者時勾選Spring Cloud Tracing -> Sleuth 也可以手動添加依賴: <dependency> < ...
  • 會話技術 1. 會話:一次會話中包含多次請求和響應 一次會話:瀏覽器第一次給伺服器發送請求,會話建立,直到有一方斷開為止 2. 功能:在一次會話的範圍內的多次請求間,共用數據 3. 方式: 1. 客戶端會話技術:Cookie 2. 伺服器端會話技術:Session Cookie 1. 概念:客戶端會 ...
  • 1. Image.open(fp, mode="r") 調用此方法需要引入頭文件:from PIL import Image。 參數說明: fp:圖片路徑,可為絕對路徑或相對路徑。 model:預設即可。 2. 例子 2.1 Code 首先給定圖片路徑,然後調用函數Image.open()即可。 1 ...
  • 一、準備環境 1. 雲主機和功能變數名稱 雲主機 推薦使用阿裡雲或者騰訊雲的ecs主機,如果有學生證的話都很便宜。 功能變數名稱 國內的話,在阿裡雲或者騰訊雲購買都可以,國內功能變數名稱都需要備案,備案按照文檔去做。 ssl證書 雲服務商一般都有免費的ssl證書申請,也可以使用let's encrypt的證書。 2. 公眾 ...
  • 1. cv2.imread(filename, flags=None) 需要引入頭文件: import cv2 參數說明: filename: 文件路徑,絕對路徑和相對路徑都可以。 2. 例子 2.1 Code 首先定義路徑,然後直接調用函數cv2.imread()即可。 1 import cv2 ...
  • 1. repeat_interleave(self: Tensor, repeats: _int, dim: Optional[_int]=None) 參數說明: self: 傳入的數據為tensor repeats: 複製的份數 dim: 要複製的維度,可設定為0/1/2..... 2. 例子 2 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...