【SSM】SpringMVC學習筆記8:攔截器

這篇學習筆記是Spring系列筆記的第8篇,該筆記是筆者在學習黑馬程序員SSM框架教程課程期間的筆記,供自己和他人參考。


Spring學習筆記目錄

筆記1:【SSM】Spring基礎: IoC配置學習筆記-CSDN博客?對應黑馬課程P1~P20的內容。

筆記2: 【SSM】Spring學習筆記2:注解配置bean_ssm黑馬筆記-CSDN博客?對應黑馬課程P21~P27

筆記3:?【SSM】Spring學習筆記3:Spring整合MyBatis和Junit_spring整合mybaits-CSDN博客 對應黑馬課程P28~30

筆記4:【SSM】Spring學習筆記4:Spring的AOP編程-CSDN博客?對應黑馬課程P31~39

筆記5:【SSM】Spring學習筆記5:Spring事務-CSDN博客?對應黑馬課程P40~42

筆記6: 【SSM】SpringMVC學習筆記6:SpringMVC入門-CSDN博客?對應黑馬課程P43~58

筆記7: 【SSM】SpringMVC學習筆記7:前后端數據傳輸協議和異常處理-CSDN博客?對應黑馬課程P59~65

筆記8:此篇?對應黑馬課程P71~74

筆記9:【SSM】SpringBoot學習筆記1:SpringBoot快速入門-CSDN博客?對應黑馬課程P90~101


1.是什么

SpringMVC提供的技術,用于在controller前后執行一些操作,包括可以在controller前攔截操作使程序不執行controller的功能。

2. 快速入門

2.1 聲明攔截器的bean

這個類需要實現HandlerInterceptor接口。

該接口有三個方法可以重寫,但不是必需要重寫。

其中preHandle方法實在controller執行前執行的方法,如果該方法返回true,會放行訪問controller;否則將不會訪問controller,起到一個攔截的效果。

@Component
//定義攔截器類,實現HandlerInterceptor接口
//注意當前類必須受Spring容器控制
public class ProjectInterceptor implements HandlerInterceptor {@Override//原始方法調用前執行的內容//返回值類型可以攔截控制的執行,true放行,false終止public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String contentType = request.getHeader("Content-Type");HandlerMethod hm = (HandlerMethod)handler;System.out.println("preHandle..."+contentType);return true;}@Override//原始方法調用后執行的內容public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle...");}@Override//原始方法調用完成后執行的內容public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion...");}
}

2.2 定義配置類

在該配置類中進行攔截器配置,配置在哪些controller上使用哪些攔截器。

需要繼承WebMvcConfigurationSupport(筆記6中對靜態界面的放行也是通過這個類來配置),實現addInterceptors方法。自己定義好的攔截器需要注入。

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {@Autowiredprivate ProjectInterceptor projectInterceptor;@Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");}@Overrideprotected void addInterceptors(InterceptorRegistry registry) {//配置攔截器//  “/books/*”里使用“*”通配符registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*");}
}

該配置類需要被SpringMVC的核心配置類(用于初始化SpringMVC容器的類)掃描到(通過@ComponentScan注解)

@Configuration
@ComponentScan({"com.itheima.controller","com.itheima.config"})
@EnableWebMvc
public class SpringMvcConfig {}

2.3 執行流程

3. 攔截器的參數

如下圖攔截器的這些參數使可以使用的。

【豆包】

1.?HttpServletRequest request
  • 作用:封裝客戶端的 HTTP 請求信息,如請求參數、請求頭、Cookies 等。
  • 常用方法
    • request.getParameter("name"):獲取請求參數。
    • request.getHeader("User-Agent"):獲取請求頭。
    • request.getSession():獲取用戶會話。
  • 使用場景:在postHandle中,可以讀取請求信息用于日志記錄或權限驗證。
2.?HttpServletResponse response
  • 作用:封裝服務器的 HTTP 響應信息,可用于設置響應頭、狀態碼或直接輸出內容。
  • 常用方法
    • response.setStatus(200):設置 HTTP 狀態碼。
    • response.setContentType("application/json"):設置響應類型。
    • response.getWriter().write("Custom Response"):直接輸出內容。
  • 使用場景:在postHandle中,可以修改響應頭(如添加 CORS 信息)或提前終止響應。
3.?Object handler(樹樹:涉及反射機制)
  • 作用:當前請求執行的處理器對象。在 Spring MVC 中,通常是一個HandlerMethod(即 Controller 中的方法)。
  • 常用操作
    • 判斷處理器類型:if (handler instanceof HandlerMethod)
    • 獲取方法信息:HandlerMethod handlerMethod = (HandlerMethod) handler;
    • 獲取方法注解:handlerMethod.getMethod().getAnnotation(MyAnnotation.class)
  • 使用場景:根據不同的處理器或方法注解執行不同的邏輯(如僅對特定接口進行攔截)。
4.?ModelAndView modelAndView
  • 作用:封裝處理器返回的模型數據和視圖信息(僅當處理器返回ModelAndView時有效)。
  • 常用操作
    • 修改模型數據:modelAndView.addObject("key", "value");
    • 更改視圖:modelAndView.setViewName("newView");
    • 判斷是否有視圖:if (modelAndView != null)
  • 使用場景:在響應返回前,動態添加額外數據(如全局變量)或修改視圖路徑。
5.Exception ex?參數的作用
  • 作用:封裝處理器(Controller 方法)執行過程中拋出的未被捕獲的異常
  • 注意事項
    • 僅當請求處理過程中發生異常時ex?才不為?null
    • 如果請求正常完成(無異常),ex?為?null

4. 攔截器鏈

對同一個controller配置多個攔截器就會形成攔截器鏈

如下面對訪問/books、/books/的控制器添加兩個攔截器,將會以以下順序執行

  1. projectInterceptor.preHandle
  2. ->projectInterceptor2.preHandle
  3. ->projectInterceptor2.postHandle
  4. ->projectInterceptor.postHandle
  5. ->projectInterceptor2.afterCompletion
  6. ->projectInterceptor.afterCompletion
@Configuration
@ComponentScan({"com.itheima.controller"})
@EnableWebMvc
//實現WebMvcConfigurer接口可以簡化開發,但具有一定的侵入性
public class SpringMvcConfig implements WebMvcConfigurer {@Autowiredprivate ProjectInterceptor projectInterceptor;@Autowiredprivate ProjectInterceptor2 projectInterceptor2;@Overridepublic void addInterceptors(InterceptorRegistry registry) {//配置多攔截器registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*");registry.addInterceptor(projectInterceptor2).addPathPatterns("/books","/books/*");}
}

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

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

相關文章

從認識AI開始-----變分自編碼器:從AE到VAE

前言 之前的文章里,我已經介紹了傳統的AE能夠將高維輸入壓縮成低維表示,并重建出來,但是它的隱空間結構并沒有概率意義,這就導致了傳統的AE無法自行生成新的數據(比如新圖像)。因此,我們希望&a…

智慧賦能:移動充電樁的能源供給革命與便捷服務升級

在城市化進程加速與新能源汽車普及的雙重推動下,移動充電樁正成為能源供給領域的一場革命。傳統固定充電設施受限于布局與效率,難以滿足用戶即時、靈活的充電需求,而移動充電樁通過技術創新與服務升級,打破了時空壁壘,…

發版前后的調試對照實踐:用 WebDebugX 與多工具構建上線驗證閉環

每次產品發版都是一次“高壓時刻”。版本升級帶來的不僅是新功能上線,更常伴隨隱藏 bug、兼容性差異與環境同步問題。 為了降低上線風險,我們逐步構建了一套以 WebDebugX 為核心、輔以 Charles、Postman、ADB、Sentry 的發版調試與驗證流程,…

如何安裝huaweicloud-sdk-core-3.1.142.jar到本地倉庫?

如何安裝huaweicloud-sdk-core-3.1.142.jar到本地倉庫? package com.huaweicloud.sdk.core.auth does not exist 解決方案 # 下載huaweicloud-sdk-core-3.1.142.jar wget https://repo1.maven.org/maven2/com/huaweicloud/sdk/huaweicloud-sdk-core/3.1.142/huawe…

Python學習(7) ----- Python起源

🐍《Python 的誕生》:一段圣誕假期的奇妙冒險 📍時間:1989 年圣誕節 在荷蘭阿姆斯特丹的一個寒冷冬夜,燈光昏黃、窗外飄著雪。一個程序員 Guido van Rossum 正窩在家里度假——沒有會議、沒有項目、沒有 bug&#xf…

DiMTAIC 2024 數字醫學技術及應用創新大賽-甲狀腺B超靜態及動態影像算法賽-參賽項目

參賽成績 項目介紹 去年參加完這個比賽之后,整理了項目文件和代碼,雖然比賽沒有獲獎,但是參賽過程中自己也很有收獲,自己一個人搭建了完整的pipeline并基于此提交了多次提高成績,現在把這個項目梳理成博客&#xff0c…

繪制餅圖詳細過程

QtCharts繪制餅圖 說明:qcustomplot模塊沒有繪制餅圖的接口和模塊,所以用Qt官方自帶的QtCharts進行繪制。繪制出來還挺美觀。 1 模塊導入 QT chartsQT_BEGIN_NAMESPACE以上這兩行代碼必須得加 2 總體代碼 widget.h #ifndef WIDGET_H #defin…

本地windows主機安裝seafile部署詳解,及無公網IP內網映射外網訪問方案

在Windows上部署Seafile服務器是一個相對直接的過程,但需要你具備一定的系統管理知識。Seafile是一個開源的文件共享和協作平臺,類似于Dropbox或Google Drive。 以下是在Windows上部署Seafile服務器的步驟: 1. 準備環境 確保你的Windows系…

Vue學習之---nextTick

前言:目前來說,nextTick我們遇到的比較少,至少對我來說是這樣的,但是有一些聰明的小朋友早早就注意到這個知識點了。nextTick 是前端開發(尤其是 Vue 生態)中的核心知識點,原理上跟Vue的異步更新…

MS2691 全頻段、多模導航、射頻低噪聲放大器芯片,應用于導航儀 雙頻測量儀

MS2691 全頻段、多模導航、射頻低噪聲放大器芯片,應用于導航儀 雙頻測量儀 產品簡述 MS2691 是一款具有 1164MHz ? 1615MHz 全頻段、低功耗的低噪聲放大器芯片。該芯片通過對外圍電路的簡單配置,使得頻帶具有寬帶或窄帶特性。支持不同頻段的各種導…

學習STC51單片機30(芯片為STC89C52RCRC)

每日一言 當你感到疲憊時,正是成長的關鍵時刻,再堅持一下。 IIC協議 是的,IIC協議就是與我們之前的串口通信協議是同一個性質,就是為了滿足模塊的通信,其實之前的串口通信協議叫做UART協議,我們千萬不要弄…

python打卡day47@浙大疏錦行

昨天代碼中注意力熱圖的部分順移至今天 知識點回顧: 熱力圖 作業:對比不同卷積層熱圖可視化的結果 以下是不同卷積層特征圖可視化的對比實現: import torch import matplotlib.pyplot as pltdef compare_conv_layers(model, input_tensor):# …

藍橋杯單片機之通過實現同一個按鍵的短按與長按功能

實現按鍵的短按與長按的不同功能 問題分析 對于按鍵短按,通常是松開后實現其功能,而不會出現按下就進行后續的操作;而對于按鍵長按,則不太一樣,按鍵長按可能分為兩種情況,一是長按n秒后實現后續功能&…

數據導入技術(文檔加載)

1. 簡單文本的讀取 用LangChain讀入txt文檔 # 讀取單個txt文件 import os from langchain_community.document_loaders import TextLoader # 獲取當前腳本文件所在的目錄 script_dir os.path.dirname(__file__) print(f"獲取當前腳本文件所在的目錄:{script…

靶場(二十)---靶場體會小白心得 ---jacko

老樣子開局先看端口,先看http端口 PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 |_http-title: H2 Database Engine (redirect) | http-methods: |_ Potentially risky methods: TRACE |_http-server-header:…

讓AI看見世界:MCP協議與服務器的工作原理

讓AI看見世界:MCP協議與服務器的工作原理 MCP(Model Context Protocol)是一種創新的通信協議,旨在讓大型語言模型能夠安全、高效地與外部資源進行交互。在AI技術快速發展的今天,MCP正成為連接AI與現實世界的重要橋梁。…

|從零開始的Pyside2界面編程| 用Pyside2打造一個AI助手界面

🐑 |從零開始的Pyside2界面編程| 用Pyside2打造一個AI助手界面 🐑 文章目錄 🐑 |從零開始的Pyside2界面編程| 用Pyside2打造一個AI助手界面 🐑?前言??調取Deepseek大模型??準備工作??調用API? ?將模型嵌入到ui界面中??…

如何利用Elastic Stack(ELK)進行安全日志分析

在以下文章中,我將解釋如何使用Elastic Stack(ELK)進行安全日志分析,以提高安全性和監控網絡活動。ELK是一個功能強大的開源日志管理和分析平臺,由Elasticsearch、Logstash和Kibana組成,適用于各種用例&…

網絡安全-等級保護(等保)3-0 等級保護測評要求現行技術標準

################################################################################ 第三章:測評要求、測評機構要求,最終目的是通過測評,所以我們將等保要求和測評相關要求一一對應形成表格。 GB/T 28448-2019 《信息安全技術 網絡安全等…

網絡通訊知識——通訊分層介紹,gRPC,RabbitMQ分層

網絡通訊分層 網絡通訊分層是為了將復雜的網絡通信問題分解為多個獨立、可管理的層次,每個層次專注于特定功能。目前主流的分層模型包括OSI七層模型和TCP/IP四層(或五層)模型,以下是詳細解析: 一、OSI七層模型&#…