springboot攔截器和過濾器

過濾器

Filter依賴于servlet容器,屬于servlet規范的一部分
Filter的生命周期由servlet容器管理
Filter可攔截所有web資源(包括jsp,Servlet,靜態資源,Controller)

自定義Filter

import javax.servlet.*;
@WebFilter(urlPatterns = "/*") //過濾以/開頭的任意請求
public class MyFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)servletRequest;//ip地址String remoteAddr = request.getRemoteAddr();HttpSession session = request.getSession();Integer count = (Integer)session.getAttribute("count");count = Objects.isNull(count)?1:++count;session.setAttribute("count",count);System.out.println("MyFilter "+ remoteAddr + " "+ count);//放行filterChain.doFilter(servletRequest, servletResponse);}
}

啟動類上添加servlet組件掃描

@ServletComponentScan(basePackages = "com.meteorological.filtertest")
public class SpringbootApplication {public static void main(String[] args){SpringApplication.run(SpringbootApplication.class, args);}
}

任意Controller執行時都會被自定義過濾器MyFilter攔截

攔截器

Interceptor依賴于SpringMVC框架
Interceptor通過IOC容器來管理,可通過注入等方式來獲取其Bean的實例
Interceptor則只攔截Controller

自定義攔截器

public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//ip地址String remoteAddr = request.getRemoteAddr();HttpSession session = request.getSession();Integer count = (Integer)session.getAttribute("count");count = Objects.isNull(count)?1:++count;session.setAttribute("count",count);System.out.println("MyInterceptor "+ remoteAddr + " "+ count);//放行return true;}
}

將自定義攔截器添加到ioc容器中

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {//將自定義攔截器添加到ioc容器中registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");}
}

任意Controller執行時都會被自定義攔截器MyInterceptor攔截

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

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

相關文章

文件的順序讀寫函數舉例介紹

目錄 例1:(使用字符輸出函數fputc)例2:(使用字符輸入函數fgetc)例3:(使用文本行輸出函數fputs )例4:(使用文本行輸入函數fgets )例5&a…

Docker基礎教程 - 2 Docker安裝

更好的閱讀體驗:點這里 ( www.doubibiji.com ) 2 Docker安裝 Docker 的官網地址:https://www.docker.com/,在官網可以找到 Docker Engine 的安裝步驟。 下面進行 Docker 環境的安裝,正常情況下 Docker …

服務發現:CP or AP?

1 服務發現的意義 為高可用,生產環境中服務提供方都以集群對外提供服務,集群里這些IP隨時可能變化,也需要用一本“通信錄”及時獲取對應服務節點,這獲取過程即“服務發現”。 對服務調用方和服務提供方,其契約就是接…

(3)(3.1) FlightDeck FrSky發射器應用程序

文章目錄 前言 1 概述 2 Turnkey Packages 3 參數說明 前言 ?Craft and Theory 的 FlightDeck 可讓你輕松查看飛行模式、高度、速度、姿態和關鍵系統警報,包括故障保護和電池錯誤,如電池不平衡警告和發射機低電量警報。 1 概述 Craft and Theory 的…

【自然語言處理】NLP入門(二):1、正則表達式與Python中的實現(2):字符串格式化輸出(%、format()、f-string)

文章目錄 一、前言二、正則表達式與Python中的實現1.字符串構造2. 字符串截取3. 字符串格式化輸出3.1 %符號格式化字符串1. 一般形式2. 常用格式字符3. 最小寬度和精度4. 進位制和科學計數法5. 多個對象的格式化輸出6. 典例 3.2 format()方法格式化字符串1. 一般形式2. 參數傳遞…

51單片機-(中斷系統)

51單片機-(中斷系統) 了解51單片機中斷系統、中斷源、中斷響應條件和優先級等,通過外部中斷0實現按鍵控制LED亮滅為例理解中斷工作原理和編程實現過程。 1.中斷系統結構 89C51/52的中斷系統有5個中斷源 ,2個優先級,…

WiFi模塊引領智能家居革命:連接未來的生活

隨著科技的快速發展,智能家居正成為現代生活的一部分,極大地改變了我們與家庭環境互動的方式。其中,WiFi模塊作為關鍵的連接技術,在推動智能家居革命中發揮著不可忽視的作用。本文將深入探討WiFi模塊如何驅動智能家居革命。 設備互…

1027 打印沙漏

本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印 ***** *** * *** ***** 所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到…

多線程:線程通信

線程通信 什么是線程通信 當多個線程共同操作共享的資源時,線程間通過某種方式互相告知自己的的狀態,以相互協調,并避免無效的資源爭奪。 線程通信的常見模型(生產者與消費者模型) 生產者線程負責生產數據消費者線…

對抽象工廠模式的理解

目錄 1 背景1.1 題目描述1.2 輸入描述1.3 輸出描述1.4 輸入示例1.5 輸出示例 2 抽象工廠模式3 思考3.1 我的實現3.2 什么時候用抽象工廠模式?(怎么用才是合適的?)3.3 [更好的例子](https://refactoringguru.cn/design-patterns/ab…

【探索Linux】—— 強大的命令行工具 P.24(網絡基礎)

閱讀導航 引言一、計算機網絡背景1. 網絡發展歷史 二、認識 "協議"1. 網絡協議概念2. 網絡協議初識(1)協議分層(2)OSI參考模型(Open Systems Interconnection Reference Model)(3&…

NoSQL--1.虛擬機網絡配置

目錄 1.初識NoSQL 1.1 NoSQL之虛擬機網絡配置 1.1.1 首先,導入預先配置好的NoSQL版本到VMware Workstation中 1.1.2 開啟虛擬機操作: 1.1.2.1 點擊開啟虛擬機: 1.1.2.2 默認選擇回車CentOS Linux(3.10.0-1127.e17.x86_64) 7 …

cobalt strike釣魚lnk報錯:無法連接到遠程服務器

筆者在學習 cobalt strike 制作釣魚文件時發現多次失敗,在 win10 虛擬機的 powershell 的多次排查后發現這樣一個報錯: 使用“1”個參數調用“DownloadString”時發生異常:“無法連接到遠程服務器“ 經過多次排查后發現問題出在 cs 的 team server上&…

解決:Glide 在回調中再次加載圖片報錯

一、問題說明 Glide 加載圖片時監聽了回調&#xff0c;并在失敗時再次加載其它圖片后報錯。 代碼&#xff1a; Glide.with(mContext).load(imgTeacher).listener(new RequestListener<Drawable>() {Overridepublic boolean onLoadFailed(Nullable GlideException e, O…

MCU 串口接收環形緩沖區的實現

環形緩沖區 1. 環形緩沖區的特性 1.先進先出 2. 當緩沖區被使用完&#xff0c;且又有新的數據需要存儲時&#xff0c;丟掉歷史最久的數據&#xff0c;保存最新的數據 現實中的存儲介質都是線性的&#xff0c;因此我們需要做一下處理&#xff0c;才能在功能上實現環形緩沖區 …

[計算機網絡]--I/O多路轉接之poll和epoll

前言 作者&#xff1a;小蝸牛向前沖 名言&#xff1a;我可以接受失敗&#xff0c;但我不能接受放棄 如果覺的博主的文章還不錯的話&#xff0c;還請點贊&#xff0c;收藏&#xff0c;關注&#x1f440;支持博主。如果發現有問題的地方歡迎?大家在評論區指正 目錄 一、poll函…

web漏洞與規避

文章目錄 一、XSS 跨站腳本攻擊1.1 XSS攻擊的主要類型反射型XSS存儲型XSSDOM型XSS 1.2 前端開發如何應對XSS 二、CSRF 跨站請求偽造2.1 CSRF例子2.2 前端開發如何應對CSRF 三、SQL 注入3.1 前端如何防御SQL注入 四、前端如何使用CSP 一、XSS 跨站腳本攻擊 攻擊者通過在受害者的…

stm32學習筆記:IIC通信(未完)

概述 第一塊&#xff1a;介紹協議規則&#xff0c;然后用軟件模擬的形式來實現協議。 第二塊&#xff1a;介紹STM32的iic外設&#xff0c;然后用硬件來實現協議。 程序一現象&#xff1a;通過軟件I2C通信&#xff0c;對MPU6050芯片內部的寄存器進行讀寫&#xff0c;寫入到配…

【Synchronized同步原理】

Synchronized同步原理 1. synchronized的使用&#xff1f;2. 如何保證線程安全的&#xff1f;3.可重入原理&#xff08;加鎖次數計數器&#xff09;4. 原子性和可見性(順序性) 1. synchronized的使用&#xff1f; 對象鎖方法鎖類鎖 2. 如何保證線程安全的&#xff1f; publi…

關于數據提交上傳服務端的數據類型以及項目打包上線的流程

1 請求頭的類型&#xff1a; content-type&#xff1b; 01: application/json 數據以json格式請求&#xff1a;{"key":"value"} 02: application/x-www.form-urlencoded from表單的數據格式 name"zs"&age12 03 mutipart/form-data…