過濾器和攔截器的區別

来源:https://www.cnblogs.com/FangwayLee/archive/2023/08/23/17652998.html
-Advertisement-
Play Games

一、過濾器 1.什麼是過濾器? 過濾器是一種用於JavaWeb應用程式中的組件,它可以攔截HTTP請求和響應,以實現一些特定的功能。 過濾器可以對請求和響應進行修改,可以阻止請求進入Servlet,也可以修改響應返回給客戶端。 2.過濾器的主要作用 登錄驗證:檢查用戶是否已經登錄,如果沒有登錄則跳轉 ...


一、過濾器

1.什麼是過濾器?

  過濾器是一種用於JavaWeb應用程式中的組件,它可以攔截HTTP請求和響應,以實現一些特定的功能。

  過濾器可以對請求和響應進行修改,可以阻止請求進入Servlet,也可以修改響應返回給客戶端。

2.過濾器的主要作用

  • 登錄驗證:檢查用戶是否已經登錄,如果沒有登錄則跳轉到登錄頁面。
  • 許可權控制:檢查用戶是否有訪問某個資源的許可權,如果沒有則提示錯誤信息或者跳轉到其他頁面。
  • 編碼轉換:設置請求和響應的字元編碼,解決中文亂碼問題。
  • 敏感詞過濾:替換或者屏蔽掉請求參數或者響應內容中的敏感辭彙。
  • 日誌記錄:記錄用戶的訪問信息,如IP地址,訪問時間,訪問路徑等。

3.過濾器的底層實現原理是基於回調函數的

  當一個請求到達伺服器時,伺服器會根據請求的URL匹配相應的過濾器鏈。過濾器鏈是由一個或多個過濾器組成的,按照配置的順序依次執行。

  每個過濾器都實現了Filter介面,該介面定義了三個方法:

  • init(FilterConfig filterConfig):初始化方法,在過濾器創建時調用一次,可以用來獲取過濾器配置參數。
  • doFilter(ServletRequest request, ServletResponse response, FilterChain chain):過濾方法,在每次請求被攔截時調用,可以用來執行具體的過濾邏輯。該方法有三個參數:request表示請求對象,response表示響應對象,chain表示過濾器鏈對象。通過調用chain.doFilter(request, response)方法,可以將請求傳遞給下一個過濾器或者目標Servlet。如果不調用該方法,則請求被阻止,不會繼續處理。
  • destroy():銷毀方法,在過濾器被銷毀時調用一次,可以用來釋放資源。

  使用過濾器有兩種方式:

    註解方式和XML方式。

    註解方式是通過在過濾器類上添加@WebFilter註解來配置過濾器的屬性,如攔截路徑,初始化參數等。

    XML方式是通過在web.xml文件中添加<filter>和<filter-mapping>標簽來配置過濾器的屬性。

‘    兩種方式都可以實現相同的功能,但是註解方式更簡潔方便。

4.過濾器的使用場景

  • 防止SQL註入攻擊:通過對請求參數進行檢查和轉義,避免惡意用戶輸入SQL語句造成資料庫被篡改或泄露。
  • 防止跨站腳本攻擊(XSS):通過對請求參數和響應內容進行編碼或過濾,避免惡意用戶輸入HTML或JavaScript代碼造成網頁被篡改或用戶信息被竊取。
  • 防止跨站請求偽造(CSRF):通過在表單中添加隱藏欄位或者在請求頭中添加自定義欄位,併在伺服器端進行驗證,避免惡意用戶利用用戶已登錄的身份發送非法請求。
  • 實現緩存機制:通過在響應頭中添加緩存相關的欄位,併在伺服器端判斷請求是否命中緩存,可以提高網站性能和用戶體驗。
  • 實現壓縮機制:通過在響應頭中添加壓縮相關的欄位,併在伺服器端對響應內容進行壓縮,可以減少網路傳輸的數據量和時間。

二、攔截器

1.什麼是攔截器?

  攔截器是一種用於JavaWeb應用程式中的組件,它可以在Servlet執行之前攔截HTTP請求,並對請求進行一些處理,比如登錄驗證,許可權控制,日誌記錄,編碼轉換等。

  攔截器可以根據需要決定是否繼續執行Servlet或者返迴響應。

2.攔截器的底層實現原理是基於動態代理的

  當一個請求到達伺服器時,伺服器會根據請求的URL匹配相應的攔截器鏈。攔截器鏈是由一個或多個攔截器組成的,按照配置的順序依次執行。

  每個攔截器都實現了HandlerInterceptor介面,該介面定義了三個方法:

  • preHandle(HttpServletRequest request, HttpServletResponse response, Object handler):在Servlet執行之前調用,可以對請求進行預處理,也可以返回false來阻止請求繼續執行。
  • postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView):在Servlet執行之後調用,可以對響應進行後處理,也可以修改ModelAndView對象。
  • afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex):在整個請求完成之後調用,可以用來釋放資源或者處理異常。

  使用攔截器有兩種方式:

  註解方式和XML方式。

  註解方式是通過在攔截器類上添加@WebMvcConfigurer註解來配置攔截器的屬性,如攔截路徑,排除路徑等。

  XML方式是通過在web.xml文件中添加mvc:interceptors標簽來配置攔截器的屬性。兩種方式都可以實現相同的功能,但是註解方式更簡潔方便。

3.攔截器的使用場景

  • 登錄驗證:檢查用戶是否已經登錄,如果沒有登錄則跳轉到登錄頁面或者返回錯誤信息。
  • 許可權控制:檢查用戶是否有訪問某個資源的許可權,如果沒有則提示錯誤信息或者跳轉到其他頁面。
  • 日誌記錄:記錄用戶的訪問信息,如IP地址,訪問時間,訪問路徑等。
  • 編碼轉換:設置請求和響應的字元編碼,解決中文亂碼問題。
  • 性能監控:記錄請求的開始時間和結束時間,計算請求的處理時間和響應時間。

三、攔截器和過濾器的主要區別

  • 攔截器是基於動態代理的,它可以在目標方法執行前後或者異常時進行增強處理。過濾器是基於函數回調的,它只能在請求進入或者離開容器時進行過濾操作。
  • 攔截器是SpringMVC框架提供的,它只對控制器方法有效,而過濾器是Servlet規範定義的,它對所有的請求都有效,包括靜態資源。
  • 攔截器可以訪問控制器方法的上下文信息,如方法參數,返回值,異常等。過濾器只能訪問請求和響應對象,不能獲取具體的業務邏輯信息。
  • 攔截器可以通過返回值來控制請求是否繼續執行,如果返回false,則請求被阻止。過濾器沒有這樣的功能,只能通過轉發或者重定向來改變請求的流程。
  • 攔截器可以實現多個攔截器鏈式調用,而且調用順序是可控的。過濾器也可以有多個過濾器依次執行,但是調用順序是由容器決定的。

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

-Advertisement-
Play Games
更多相關文章
  • ##### 13 CSS 的position屬性 就像photoshop中的圖層功能會把一整張圖片分層一個個圖層一樣,網頁佈局中的每一個元素也可以看成是一個個類似圖層的層模型。層佈局模型就是把網頁中的每一個元素看成是一層一層的,然後通過定位屬性position對元素進行定位擺放,最終實現網頁的佈局。 ...
  • ##### 12 CSS 的float屬性 - 流動佈局 流動模型(Flow),即文檔流,瀏覽器打開HTML網頁時,從上往下,從左往右,逐一載入。 在正常情況下,HTML元素都會根據文檔流來分佈網頁內容的。 文檔流有2大特征: ① 塊狀元素會隨著瀏覽器讀取文檔的順序,自上而下垂直分佈,一行一個的形式 ...
  • 伴隨物流行業的迅猛發展,一體化供應鏈模式的落地,對系統吞吐、系統穩定發出巨大挑戰,庫存作為供應鏈的重中之重表現更為明顯。 ...
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 本篇概覽 - 本篇是《java與es8實戰》系列的第二 ...
  • —併發包— 大型企業開發才用,我Java學得差不多以後再來學,主要是有點難,沒學泛型與集合… 練手的ConcurrentHashMap: import java.util.HashMap;import java.util.Hashtable;import java.util.concurrent.C ...
  • [toc] ## 1.自定義枚舉類 ```java public enum ReturnCode { RC200(200, "ok"), RC400(400, "請求失敗,參數錯誤,請檢查後重試。"), RC404(404, "未找到您請求的資源。"), RC405(405, "請求方式錯誤,請檢查 ...
  • **若項目中使用了@MapperScan註解後,則@Mapper註解不再生效**, 原因是:@MapperScan註解 會執行@Import(MapperScannerRegistrar.class),而MapperScannerRegistrar又會註冊MapperScannerConfigure ...
  • 前言:這篇文章分享的實操案例對於外貿從業者特別有用,並分享了一款免費可用的瀏覽器插件進行如何批量獲客。 做外貿需要找客戶成交,外貿業務員成單的前提是就是找到國外客戶。 外貿找客戶的方法無外乎兩種: - 第一種是主動出擊 - 第二種是提前佈局,也就是有預謀有計劃有目標的等待客戶上鉤。 前者最常見的方式 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...