SpringMVC(五)攔截器

目錄

攔截器基本概念

一 單個攔截器的執行

1 創建攔截器

2 SpringMVC配置,并指定攔截路徑。

3 運行結果展示:

二 多個攔截器的執行順序

三 攔截器與過濾器的區別


攔截器基本概念

SpringMVC內置攔截器機制,允許在請求被目標方法處理的前后進行攔截,執行一些額外操作;比如權限驗證、日志記錄、數據共享等。

作用對象:controller(處理請求)

使用步驟:

  • 實現HandlerInterceptor接口的組件即可成為攔截器
  • 創建WebMvcConfigurer組件,并配置攔截器的攔截路徑。
  • 查看執行順序效果:preHandke=>目標方法=>postHandle=>afterCompletion

一 單個攔截器的執行

1 創建攔截器

這里的返回值如果是false將會將方法攔截,只會執行preHandle這一個方法

package org.example.springmvc.interceptor;import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;@Component//攔截器需要配置指定攔截的請求
public class myHandlerInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle");// 放行return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion");}
}

2 SpringMVC配置,并指定攔截路徑。

package org.example.springmvc.config;import org.example.springmvc.interceptor.myHandlerInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;// 對SpringMVC的底層進行一些配置
// 需要實現一個接口WebMvcConfigurer
@Configuration
public class MySpringMVCConfig implements WebMvcConfigurer {private final myHandlerInterceptor myHandler;public MySpringMVCConfig(myHandlerInterceptor myHandler) {this.myHandler = myHandler;}//添加攔截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 攔截所有請求registry.addInterceptor(myHandler).addPathPatterns("/**");}}

3 運行結果展示:

總結:

Spring MVC攔截器通過靈活的三個方法鉤子,為開發者提供了在請求處理流程中插入邏輯的能力,適合實現與業務緊密相關的橫切關注點(如鑒權、日志)。合理使用攔截器可以顯著提升代碼的可維護性和復用性。

二 多個攔截器的執行順序

個人理解總結

1 所有的preHandle都放行之后才可以執行postHandle這一行

2 如果preHandle0和preHandle1執行并返回true那么后面會依次執行preHandle2

(如果preHandle的返回值為false那么會執行afterCompletion1,afterCompletion0這兩個方法)

(如果preHandle的返回值為true那么會執行postHandle2,1,0,并依次afterCompletion,2,1,0)

3 afterCompletion與postHandle兩條鏈路互不影響,這兩條鏈路的影響因素是preHandle這一行,如果這兩條鏈路中在某一個環節斷了(拋出異常),那么這一條鏈路將會停止,而另一條鏈路不受影響。

(如果pre這一層正常執行,而postHandle1拋出異常,那么后續的postHandle0將不再執行,而afterCompletion這一條鏈路不受影響正常執行。)

(如果pre這一層正常執行,而afterCompletion1拋出異常,那么后續的afterCompletion0將不再執行,而postHandle這一條鏈路不受影響并且已經執行完成。)

三 攔截器與過濾器的區別

在Spring框架中優先使用攔截器,在web框架可以選擇filter過濾器

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72500.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72500.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72500.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hive SQL 精進系列:PERCENTILE_APPROX 搞定分位數

目錄 一、引言二、percentile_approx 函數基礎2.1 基本語法參數解釋返回值簡單示例 三、應用場景3.1 數據分析與報告3.2 數據清洗與異常值檢測3.3 性能監控與優化 四、使用注意事項4.1 數據類型要求4.2 精度與性能平衡4.3 空值處理 五、總結 一、引言 百分位數作為一種常用的統…

pytorch快速入門——手寫數字分類GPU加速

👑主頁:吾名招財 👓簡介:工科學碩,研究方向機器視覺,愛好較廣泛… ?💫簽名:面朝大海,春暖花開! pytorch快速入門——手寫數字分類GPU加速 一、tensor1&#…

【開源免費】基于SpringBoot+Vue.JS電商應用系統(JAVA畢業設計)

本文項目編號 T 242 ,文末自助獲取源碼 \color{red}{T242,文末自助獲取源碼} T242,文末自助獲取源碼 目錄 一、系統介紹二、數據庫設計三、配套教程3.1 啟動教程3.2 講解視頻3.3 二次開發教程 四、功能截圖五、文案資料5.1 選題背景5.2 國內…

經歷過的IDEA+Maven+JDK一些困惑

注意事項:由于使用過程中是IDEA綁定好另外2個工具,所以報錯統一都顯示在控制臺,但要思考和分辨到底是IDEA本身問題導致的報錯,還是maven導致的 使用前的配置 編輯期 定義:指的是從open projects開始,到執行…

【推理】大模型ReasonGraph:推理路徑的可視化論文及代碼分析

ReasonGraph:推理路徑的可視化 ReasonGraph demo http://192.168.50.197:5001/ 作者的其他論文 ** ** LLM推理方法的相關工作

學習路之TP6 --重寫vendor目錄下的文件(服務覆蓋command---優點:命令前后一致)

學習路之TP6 --重寫vendor目錄下的文件 一、新建命令文件:二、復制修改:Server.php三、新建服務類:WorkmanService.php四、注冊服務五、運行效果 有需求要重寫vendor\topthink\think-worker\src\command\Server.php 以實現修改代碼 一、新建命…

【藍圖使用】繪制mesh頂點的法線

文章目錄 繪制法線Normal準備工作UE5資源制作藍圖制作 參考 繪制法線Normal 參考[1]打算用藍圖走一遍渲染管線,還是可以的 準備工作 Blender制作一個三個頂點的模型 要不要材質無所謂,就一個三個頂點的mesh即可,參考[2] 找到一個法線貼…

【算法學習之路】10.二叉樹

二叉樹 前言一.簡介二.題目123 前言 我會將一些常用的算法以及對應的題單給寫完,形成一套完整的算法體系,以及大量的各個難度的題目,目前算法也寫了幾篇,題單正在更新,其他的也會陸陸續續的更新,希望大家點…

AI軟件棧:推理框架(二)-Llama CPP1

Llama CPP的主要構造,GGUF和GGML為兩個主要部分,包括模型描述文件和模型參數存儲文件 文章目錄 GGUF構建圖讀取權重 GGUF llama.cpp 的作者 Georgi Gerganov 提出的新一代大模型描述文件 GPT-Generated Unified Format,繼承自GGML&#xff0…

CentOS 7 64 安裝 Docker

前言 在虛擬機中安裝 Docker 是一種常見的測試和開發環境搭建方式。通過在虛擬機上安裝 Docker,可以方便地創建和管理容器化應用,同時避免對宿主機系統造成影響。以下是在 CentOS 7 虛擬機中安裝 Docker 的詳細步驟。 1. 更新系統(可以不操作…

Flutter_學習記錄_video_player、chewie 播放視頻

1. video_player 視頻播放 插件地址:https://pub.dev/packages/video_player 添加插件 導入頭文件 import package:video_player/video_player.dart;Android配置(iOS不用配置) 修改這個文件:/android/app/src/main/AndroidMani…

VSCode通過SSH免密遠程登錄Windows服務器

系列 1.1 VSCode通過SSH遠程登錄Windows服務器 1.2 VSCode通過SSH免密遠程登錄Windows服務器 文章目錄 系列1 準備工作2 本地電腦配置2.1 生成密鑰2.2 VS Code配置密鑰 3. 服務端配置3.1 配置SSH服務器sshd_config3.2 復制公鑰3.3 配置權限(常見問題)3.…

強大的數據庫DevOps工具:NineData 社區版

本文作者司馬遼太杰, gzh:程序猿讀歷史 在業務快速變化與數據安全日益重要的今天,生產數據庫變更管理、版本控制、數據使用是數據庫領域的核心挑戰之一。傳統的解決方式往往采用郵件或即時通訊工具發起審批流程,再通過堡壘機直連數…

離線服務器ollama新增qwen2:0.5b模型

離線服務器ollama新增qwen2:0.5b模型 Dify集成ollama前面已經介紹過離線服務器CentOS使用的docker安裝的ollama,其中在ollama中已經安裝了deepseek-r1:1.5b。目前的需求是需要再安裝一個qwen2:0.5b的模型,那么如何安裝呢? 1.首先在有網的服…

淺談StarRocks數據庫簡介及應用

StarRocks是一款高性能的實時分析型數據庫,專為復雜的SQL查詢提供極高的性能,尤其適用于數據分析場景。它是一款開源的新一代極速全場景MPP(Massively Parallel Processing,大規模并行處理)數據庫,致力于構…

Cadence學習筆記4

想到一個思路理解過程,記錄一下: 就是我在別的地方,前一天的那些 Lib 都不在了,突然發現自己好像就在 Cadence 中畫不了 PCB 了。這就引發了我思考在 Cadence 中如何進行繪制的一個整體的流程。 首先得有原理圖,那么原…

Linux--git

ok,我們今天來學習如何在Linux上建立鏈接git 版本控制器Git 不知道你?作或學習時,有沒有遇到這樣的情況:我們在編寫各種?檔時,為了防??檔丟失,更改 失誤,失誤后能恢復到原來的版本,不得不…

(七)Spring Boot學習——Redis使用

有部分內容是常用的,為了避免每次都查詢數據庫,將部分數據存入Redis。 一、 下載并安裝 Redis Windows 版的 Redis 官方已不再維護,你可以使用 微軟提供的 Redis for Windows 版本 或者 使用 WSL(Windows Subsystem for Linux&a…

HarmonyOS NEXT 聲明式UI語法學習筆記-創建自定義組件

基礎語法概述 ArkTS的基本組成 裝飾器:用于裝飾類、結構、方法以及變量,并賦予其特殊含義。如上圖都是裝飾器,Component表示自定義組件,Entry表示表示自定義組件的入口組件,State表示組件中的狀態變量,當狀…

【ElasticSearch】學習筆記

一、lucene的組成 segment是一個具備完整搜索功能的最小單元。 多個segment組成了一個單機文本檢索庫lucene。 inverted index:倒排索引,用于快速根據關鍵詞找到對應的文章term index: 構建出關鍵詞的目錄樹,解決了term dictionary數據量過大&#xff…