跳到主要內容

發表文章

目前顯示的是 1月, 2026的文章

初探 Filter

  前言 有時候,我們會期望某些事件(例如,Logging, 處理驗證身份...等)能夠在請求進入Controller前或響應返回客戶端前做些處理。類似這漾的需求,透過 Filter 的功能,我們就能夠在前端請求進入 Controller 之前,或是處理完 Response 返回給前端之前,執行其他邏輯處理,達到我們要的目的。本文件就兩個簡單例子說明 Filter 功能。 Spring 其順序如下圖: 註:           1. Filter 不是 Spring 的機制,而是 Java Servlet 規範的一部分。Spring 只是使用並整合 Filter         2. 本文範例一 : 旨在演示說明。 範例二 : 提供完整 Logging Filter 實作說明 。 OncePerRequestFilter Spring 有一個稱為 OncePerRequestFilter 的 Filter,適合用來處理JWT 驗證需求。 為什麼用 OncePerRequestFilter?因為 OncePerRequestFilter 在單一個 Request 只執行一次,而且它保證,同一個 request 只會執行一次,JWT 驗證 只能做一次,正好適合用來處理驗證。 範例一: 僅用於演示說明。Request -> 檢查驗證攔截請求,從 Header 中提取 Token。建立一個類別叫 JwtAuthenticationFilter ,它繼承了 OncePerRequestFilter 抽象類別,並覆寫 doFilterInternal 方法。 攔截請求,從 Header 中提取 Token public class JwtAuthenticationFilter extends OncePerRequestFilter {     @Autowired     private JwtService tokenService;     @Autowired     private CustomUserDetailsService ...