SpringBoot之HandlerInterceptor攔截器的使用

😀前言
本篇博文是關于攔截器-HandlerInterceptor的使用,希望你能夠喜歡

🏠個人主頁:晨犀主頁
🧑個人簡介:大家好,我是晨犀,希望我的文章可以幫助到大家,您的滿意是我的動力😉😉
💕歡迎大家:這里是CSDN,我總結知識的地方,歡迎來到我的博客,感謝大家的觀看🥰
如果文章有什么需要改進的地方還請大佬不吝賜教 先在此感謝啦😊

文章目錄

  • 攔截器-HandlerInterceptor
    • 基本介紹
      • 基本步驟:
    • 攔截器應用實例
      • 需求:
      • 代碼實現
    • 注意事項和細節
      • URI 和URL 的區別
        • 舉例說明:
    • 😄總結

攔截器-HandlerInterceptor

基本介紹

在Spring Boot 項目中, 攔截器是開發中常用手段,要來做登陸驗證、性能檢查、日志記錄等。

基本步驟:

√ 編寫一個攔截器實現HandlerInterceptor 接口
√ 攔截器注冊到配置類中(實現WebMvcConfigurer 的addInterceptors)
√ 指定攔截規則

攔截器應用實例

需求:

使用攔截器防止用戶非法登錄, 如圖- 使用攔截器就不需要在每個方法驗證了
瀏覽器輸入: http://localhost:8080/manage.html , 如果用戶沒有登錄,則返回登錄界面.

image-20230813210700183

代碼實現

  1. 創建com/my/usersys/interceptor/LoginInterceptor.javapackage com.
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {// 目標方法執行前被調用.@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//為了讓小伙伴看到訪問的URIString requestURI = request.getRequestURI();String requestURL = request.getRequestURL().toString();log.info("preHandle攔截到的請求的URI={}", requestURI);log.info("preHandle攔截到的請求的URL={}", requestURL);//進行登錄的校驗HttpSession session = request.getSession();Object loginAdmin = session.getAttribute("loginAdmin");if (null != loginAdmin) {//說明該用戶已經成功登錄//放行return true;}//攔截, 重新返回到登錄頁面request.setAttribute("msg", "你沒有登錄/請登錄~~");request.getRequestDispatcher("/").forward(request, response);return false;}//目標方法執行完成以后調用@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {log.info("postHandle執行了...");}//頁面渲染以后調用@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {log.info("afterCompletion執行了...");}
}
  1. 創建com/my/usersys/config/WebConfig.java
@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {//注冊自定義攔截器LoginInterceptorregistry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**") //攔截所有的請求.excludePathPatterns("/","/login","/images/**");//指定要放行的,后面可以根據業務需求,來添加放行的請求路徑}
}
  1. 修改com/my/usersys/controller/AdminController.java , 去掉session 驗證用戶是否登錄代碼, 并完成測試, 注意看頁面和后臺日志.
//處理用戶的請求到 manage.html@GetMapping("/manage.html")public String mainPage(Model model, HttpSession session) {log.info("進入mainPage()");//可以這里集合-模擬用戶數據, 放入到request域中,并顯示ArrayList<User> users = new ArrayList<>();users.add(new User(1, "關羽~", "666666", 20, "gy@sohu.com"));users.add(new User(2, "張飛", "666666", 30, "zf@sohu.com"));users.add(new User(3, "趙云", "666666", 22, "zy@sohu.com"));users.add(new User(4, "馬超", "666666", 28, "mc@sohu.com"));users.add(new User(5, "黃忠", "666666", 50, "hz@sohu.com"));//放入model的數據默認到request域model.addAttribute("users", users);return "manage"; //這里才是我們的視圖解析到 /templates/manage.html}

image-20230813211243822

image-20230813211311424

注意事項和細節

URI 和URL 的區別

URI = Universal Resource Identifier
URL = Universal Resource Locator
Identifier:標識符,Locator:定位器從字面上來看, URI 可以唯一標識一個資源, URL 可以提供找到該資源的路徑

舉例說明:

String requestURI = request.getRequestURI();
String requestURL = request.getRequestURL().toString();

注冊攔截器, 依然可以使用如下方式

public class WebConfig /*implements WebMvcConfigurer*/ {//將我們的攔截器, 注入到容器中//@Override//public void addInterceptors(InterceptorRegistry registry) {////    //注冊自定義攔截器LoginInterceptor//    registry.addInterceptor(new LoginInterceptor())//            .addPathPatterns("/**") //攔截所有的請求//            .excludePathPatterns("/","/login","/images/**");//指定要放行的,后面可以根據業務需求,來添加放行的請求路徑//}@Beanpublic WebMvcConfigurer webMvcConfigurer() {return new WebMvcConfigurer() {@Overridepublic void addInterceptors(InterceptorRegistry registry) {System.out.println("addInterceptors~~~");//注冊攔截器registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/","/login","/images/**");}};}
}

😄總結

  1. URI 可以唯一標識一個資源, URL 可以提供找到該資源的路徑。
  2. 攔截所有的請求時要注意哪些資源需要放行,防止無法請求。
  3. 攔截器注冊到配置類中(實現WebMvcConfigurer 的addInterceptors),一定要指定攔截規則。

😁熱門專欄推薦

Thymeleaf快速入門及其注意事項

Spring Initailizr–快速入門–SpringBoot的選擇

帶你了解SpringBoot支持的復雜參數–自定義對象參數-自動封裝

Rest 優雅的url請求處理風格及注意事項

文章到這里就結束了,如果有什么疑問的地方請指出,諸大佬們一起來評論區一起討論😁
希望能和諸大佬們一起努力,今后我們一起觀看感謝您的閱讀🍻
如果幫助到您不妨3連支持一下,創造不易您們的支持是我的動力🤞

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

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

相關文章

SQL 復習 03

函數與關鍵字 用法說明round(x, n)四舍五入&#xff0c;x為浮點數&#xff0c;n為保留的位數ceil(x)向上取整floor(x)向下取整truncate(x, n)截斷x&#xff0c;n為保留的位&#xff0c;該位之后的數值置零&#xff0c;位數表示示例&#xff1a;321.123&#xff0c;其中小數點前…

Linux 多進程

目錄 0x01 linux中特殊的進程 0x02 進程的標識 0x03 創建子進程 0x01 linux中特殊的進程 0號進程&#xff1a;idle進程&#xff0c;系統啟動加載的進程1號進程&#xff1a;systemd進程&#xff0c;系統初始化&#xff0c;是所有進程的祖先進程 init2號進程&#xff1a;kthre…

YOLOv5白皮書-第Y6周:模型改進

&#x1f4cc;本周任務&#xff1a;模型改進&#x1f4cc; 注&#xff1a;對yolov5l.yaml文件中的backbone模塊和head模塊進行改進。 任務結構圖&#xff1a; YOLOv5s網絡結構圖: 原始模型代碼&#xff1a; # YOLOv5 v6.0 backbone backbone:# [from, number, module, args]…

每日匯評:黃金在 200 日移動平均線附近似乎很脆弱,關注美國零售銷售

1、金價預計將鞏固其近期跌勢&#xff0c;至 6 月初以來的最低水平&#xff1b; 2、對美聯儲再次加息的押注繼續限制了貴金屬的上漲&#xff1b; 3、金融市場現在期待美國零售銷售報告帶來一些有意義的推動&#xff1b; 周二金價難以獲得任何有意義的牽引力&#xff0c;并在…

Mac RN環境搭建

IOS RN ios android原生環境搭建有時候是真惡心&#xff0c;電腦環境不一樣配置也有差異。 我已經安裝官網的文檔配置了ios環境 執行 npx react-nativelatest init AwesomeProject 報錯 然后自己百度查呀執行 gem update --system 說是沒有權限&#xff0c;執行失敗。因…

POSTGRESQL 關于安裝中自動啟動的問題 詳解

開頭還是介紹一下群&#xff0c;如果感興趣Polardb ,mongodb ,MySQL ,Postgresql ,redis &#xff0c;SQL SERVER ,ORACLE,Oceanbase 等有問題&#xff0c;有需求都可以加群群內有各大數據庫行業大咖&#xff0c;CTO&#xff0c;可以解決你的問題。加群請加 liuaustin3微信號 &…

OpenSSH 遠程升級到 9.4p1

OpenSSH 遠程升級到 9.4p1 文章目錄 OpenSSH 遠程升級到 9.4p1背景升級前提1. 升級 OpenSSL2. 安裝并啟用Telnet 升級OpenSSH 背景 最近的護網行動&#xff0c;被查出來了好幾個關于OpenSSH 的漏洞。這是因為服務器系統安裝后&#xff0c;直接使用了系統自帶版本的OpenSSH &am…

2023-08-15 linux mipi 屏幕調試:有一個屏幕開機時候不顯示,開機后按power 按鍵休眠喚醒就可以顯示。原因是reset gpio 被復用

一、現象&#xff1a;今天更新了一個新版本的buildroot linux sdk &#xff0c;調試兩個mipi 屏幕&#xff0c;這兩個屏幕之前在其他的sdk都調好了的&#xff0c;所有直接把配置搬過來。但是有一個屏幕可以正常顯示&#xff0c;有一個屏幕開機時候不顯示&#xff0c;開機后按po…

CentOS防火墻操作:開啟端口、開啟、關閉、配置

一、基本使用 啟動&#xff1a; systemctl start firewalld 關閉&#xff1a; systemctl stop firewalld 查看狀態&#xff1a; systemctl status firewalld 開機禁用 &#xff1a; systemctl disable firewalld 開機啟用 &#xff1a; systemctl enable firewalld systemctl是…

angular注入方法providers

在Angular中有很多方式可以將服務類注冊到注入器中: Injectable 元數據中的providedIn屬性 NgModule 元數據中的 providers屬性 Component 元數據中的 providers屬性 創建一個文件名叫名 hero.service.ts叫 hero 的服務 hero.service.ts import { Injectable } from angular…

C語言,結構體,結構體大小,

1、結構體&#xff1a; 用于存儲不同數據類型的多個相關變量&#xff0c;從而形成一個具有獨立性的組合數據類型。 結構體的聲明&#xff1a; struct 結構體類型名{ 數據類型 成員1&#xff1b; 數據類型 成員2&#xff1b; 數據類型 成員3&#xff1b; ……… }&#xff1…

轉行軟件測試四個月學習,第一次面試經過分享

我是去年上半年從銷售行業轉行到測試的&#xff0c;從銷售公司辭職之后選擇去培訓班培訓軟件測試&#xff0c;經歷了四個月左右的培訓&#xff0c;在培訓班結課前兩周就開始投簡歷了&#xff0c;在結課的時候順利拿到了offer。在新的公司從事軟件測試工作已經將近半年有余&…

深信服數據中心管理系統 XXE漏洞復現

0x01 產品簡介 深信服數據中心管理系統DC為AC的外置數據中心&#xff0c;主要用于海量日志數據的異地擴展備份管理&#xff0c;多條件組合的高效查詢&#xff0c;統計和趨勢報表生成&#xff0c;設備運行狀態監控等功能。 0x02 漏洞概述 深信服數據中心管理系統DC存在XML外部實…

WPS-0DAY-20230809的分析和利用復現

WPS-0DAY-20230809的分析和初步復現 一、漏洞學習1、本地復現環境過程 2、代碼解析1.htmlexp.py 3、通過修改shellcode拿shell曲折的學習msf生成sc 二、疑點1、問題2、我的測試測試方法測試結果 一、漏洞學習 強調&#xff1a;以下內容僅供學習和測試&#xff0c;一切行為均在…

Keil開發STM32單片機項目的三種方式

STM32單片機相比51單片機&#xff0c;內部結構復雜很多&#xff0c;因此直接對底層寄存器編碼&#xff0c;相對復雜&#xff0c;這個需要我們了解芯片手冊&#xff0c;對于復雜項目&#xff0c;這些操作可能需要反復編寫&#xff0c;因此出現了標準庫的方式&#xff0c;對寄存器…

ES中倒排索引機制

在ES的倒排索引機制中有四個重要的名詞&#xff1a;Term、Term Dictionary、Term Index、Posting List。 Term&#xff08;詞條&#xff09;&#xff1a;詞條是索引里面最小的存儲和查詢單元。一段文本經過分析器分析以后就會輸出一串詞條。一般來說英文語境中詞條是一個單詞&a…

日期時間常用功能和函數

1 time 模塊 time 模塊提供了很多與時間相關的類和函數&#xff0c;下面我們介紹一些常用的。 1.1 struct_time 類 time 模塊的 struct_time 類代表一個時間對象&#xff0c;可以通過索引和屬性名訪問值。對應關系如下所示&#xff1a; 索引屬性值0tm_year&#xff08;年&a…

Docker容器與虛擬化技術:Docker資源控制、數據管理

目錄 一、理論 1.資源控制 2.Docker數據管理 二、實驗 1.Docker資源控制 2.Docker數據管理 三、問題 1.docker容器故障導致大量日志集滿&#xff0c;造成磁盤空間滿 2、當日志占滿之后如何處理 四、總結 一、理論 1.資源控制 (1) CPU 資源控制 cgroups&#xff0…

Java Vue Uniapp MES生產執行管理系統

本MES系統是一款B/S結構、通用的生產執行管理系統&#xff0c;功能強大&#xff01; 系統基于多年離散智造行業的業務經驗組建&#xff0c;主要目的是為國內離散制造業的中小企業提供一個專業化、通用性、低成本的MES系統解決方案。 聯系作者獲取

Linux(進程控制)

進程控制 進程創建fork函數初識fork函數返回值寫時拷貝fork常規用法fork調用失敗的原因 進程終止進程退出碼進程常見退出方法 進程等待進程等待必要性獲取子進程status進程等待的方法 阻塞等待與非阻塞等待阻塞等待非阻塞等待 進程替換替換原理替換函數函數解釋命名理解 做一個…