SpringBoot中实现拦截器和过滤器
【SpringBoot中实现过滤器和拦截器】
1.过滤器和拦截器简述
过滤器Filter和拦截器Interceptor,在功能方面很类似,但在具体实现方面差距还是比较大的。
2.过滤器的配置
2.1 自定义过滤器,实现Filter接口(SpringBoot 3.0 开始,jakarta.servlet.Filter,jdk需要升级到17)
2.2 重写doFilter,实现过滤逻辑,酌情放行
2.3 创建注解,实现过滤的范围配置
3.拦截器的配置
3.1 自定义拦截器,实现HandlerInterceptor接口
3.2 实现接口中的拦截方法(preHandle-请求执行前、postHandler-请求执行后、aftercompletion-视图渲染后)
3.3 创建配置类,实现WebMvcConfigurer接口,重写addInterceptors方法
4.总结
4.1 Filter依赖于Servlet容器,属于Servlet规范的一部分,而Interceptor依赖于SpringMVC框架;【所依赖框架】
4.2 Filter的生命周期由servlet容器管理,而Interceptor通过IOC容器来管理,可通过注入等方式来获取其Bean的实例;【管理的容器】
4.3 Filter可拦截所有web资源(包括]sp,Servlet,静态资源),而Interceptor则只拦截controller。【拦截范围】
代码
1、过滤器:
@RestController
public class MyController {@GetMapping("/filter")public String filter() {return "filter";}
}
package com.example.demos.web.filter;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Objects;
/*** @date 2025/1/5 18:06* @description ip 请求的次数*/
@Component
//所有请求都会经过这个过滤器
@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;// 获取请求的ipString ip = request.getRemoteAddr();HttpSession session = request.getSession();Integer count = (Integer) session.getAttribute("count");count=Objects.isNull(count)?1:++count;System.out.println("ip:"+ip+" count:"+count);session.setAttribute("count", count);//放行filterChain.doFilter(servletRequest, servletResponse);}
}
结果:


2、拦截器
@RestController
public class MyController {@GetMapping("/interceptor")public String filter() {return "interceptor";}
}
进行拦截处理
public class MyHandlerInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 获取请求的ipString ip = request.getRemoteAddr();HttpSession session = request.getSession();Integer count = (Integer) session.getAttribute("count");count= Objects.isNull(count)?1:++count;System.out.println("ip:"+ip+" count:"+count);session.setAttribute("count", count);//放行return true;}
}
配置文件需要将自定义拦截器进行注册
@Configuration
public class InterceptorConfiguration implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {MyHandlerInterceptor interceptor = new MyHandlerInterceptor();//拦截所有请求registry.addInterceptor(interceptor).addPathPatterns("/**");}
}
结果:


相关文章:
SpringBoot中实现拦截器和过滤器
【SpringBoot中实现过滤器和拦截器】 1.过滤器和拦截器简述 过滤器Filter和拦截器Interceptor,在功能方面很类似,但在具体实现方面差距还是比较大的。 2.过滤器的配置 2.1 自定义过滤器,实现Filter接口(SpringBoot 3.0 开始,jak…...
不锈钢均温板结合强力粘合技术革新手机内部架构
摘要: 本文介绍了一种创新性的手机内部架构设计方案,其中不锈钢均温板不仅作为高效的散热元件,还充当了手机中框的主要结构件。通过使用强力不可拆胶水将主板、尾插和其他关键部件直接粘合到均温板上,该方案实现了更为紧密的热耦合…...
Docker安装使用
文章目录 Docker安装Docker的基础使用搜索&拉取镜像 Docker的生命周期利用Docker切换不同OSDocker容器 镜像的保存&分享Docker存储Docker网络 Docker安装 更新apt索引 sudo apt-get update添加Docker所需要的依赖 apt-get install ca-certificates curl gnupg lsb-r…...
React 如何进行路由变化监听
一、使用react-router库(以react-router-dom为例) 1. 历史(history)对象监听 1.1 原理 react-router内部使用history对象来管理路由历史记录。可以通过访问history对象来监听路由变化。在基于类的组件中,可以通过组…...
Unity UGUI使用技巧与经验总结(不定期更新)
Text自动缩放参考连接: Unity -UGUI中Text文本框的自动调整,字体大小的自适应调节_unity添加的字体大小锁定-CSDN博客 Toggle按钮选择时,显示对应的UI界面: 为Toggle组件的On Value Change事件添加对需要显示的对象的SetActive…...
中国乡镇界shp全境arcgis格式shp数据乡镇名称下载后内容测评
下载乡镇界shp链接:https://download.csdn.net/download/zhongguonanren99/19354855 标题中的“中国乡镇界shp全境arcgis格式shp数据乡镇名称2012年”揭示了这个数据集的核心内容。它是一个地理信息系统(GIS)数据,具体来说是使用…...
第 31 章 - 源码篇 - Elasticsearch 写入流程深入分析
写入源码分析 接收与处理 请求首先会被 Netty4HttpServerTransport 接收,接着交由 RestController 进行路由分发。 private void tryAllHandlers(final RestRequest request, final RestChannel channel, final ThreadContext threadContext) throws Exception {…...
node.js下载、安装、设置国内镜像源(永久)(Windows11)
目录 node-v20.18.0-x64 工具下载安装设置国内镜像源(永久) node-v20.18.0-x64 工具 系统:Windows 11 下载 官网https://nodejs.org/zh-cn/download/package-manager 版本我是跟着老师选的node-v20.18.0-x64如图选择 Windows、x64、v2…...
小于n的最大数 - 贪心算法 - C++
字节经典面试题 给定一个整数n,并从1~9中给定若干个可以使用的数字,根据上述两个条件,得到每一位都为给定可使用数字的、最大的小于整数n的数,例如,给定可以使用的数字为 {2,3,8} 三个数:给定 n3589&#x…...
【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 3:算法实现
目录 1 三种多头编码(MHE)实现1.1 多头乘积(MHP)1.2 多头级联(MHC)1.3 多头采样(MHS)1.4 标签分解策略 论文:Multi-Head Encoding for Extreme Label Classification 作者…...
解决CentOS 8 YUM源更新后报错问题:无法下载AppStream仓库元数据
背景介绍 在尝试更新CentOS 8的YUM源以使用阿里云镜像时,遇到了Failed to download metadata for repo appstream的错误。此错误通常出现在执行yum clean all && yum makecache命令之后,表明系统无法从指定的URL获取AppStream仓库的元数据。本文…...
[python3]Excel解析库-openpyxl
https://openpyxl.readthedocs.io/en/stable/ openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。它允许开发者创建、修改和保存电子表格,而无需依赖 Microsoft Excel 软件本身。openpyxl 支持读取和写入 Excel 的工作簿(Work…...
Docker 远程访问完整配置教程以及核心参数理解
Docker 远程访问完整配置教程 以下是配置 Docker 支持远程访问的完整教程,包括参数说明、配置修改、云服务器安全组设置、主机防火墙配置,以及验证远程访问的详细步骤。 1. 理解 -H fd:// 参数的作用(理解了以后容易理解后面的操作ÿ…...
王老吉药业SRM系统上线 携手隆道共启战略合作新篇章
12月27日,广州王老吉药业股份有限公司(简称“王老吉药业”)SRM项目上线启动会,在王老吉科普教育基地——“吉园”隆重举行。广药集团纪委主任陈耕、王老吉药业总工程师黄晓丹、隆道公司总裁吴树贵、项目经理赵耀、供应商代表郭伟及…...
MyBatis 配置文件全解析
一、MyBatis 配置文件为何至关重要? 在 Java 后端开发领域,MyBatis 作为一款广受欢迎的持久层框架,极大地简化了数据库操作。而 MyBatis 配置文件,恰似整个框架的 “神经中枢”,掌控着其运行的方方面面,对…...
unity学习6:unity的3D项目的基本界面和菜单
目录 1 unity界面的基本认识 1.1 file 文件 1.2 edit 编辑/操作 1.3 Assets 1.4 gameobject 游戏对象 1.5 组件 1.6 windows 2 这些部分之间的关系 2.1 关联1: Assets & Project 2.2 关联2:gameobject & component 2.3 关联3…...
企业二要素如何用C#实现
一、什么是企业二要素? 企业二要素,通过输入统一社会信用代码、企业名称或统一社会信用代码、法人名称,验证两者是否匹配一致。 二、企业二要素适用哪些场景? 例如:信用与金融领域 1.信用评级:信用评级…...
中科院空天院无人机视觉语言导航新基准!AeroVerse:模拟、预训练、微调和评估空中无人机具身世界模型的测试基准
作者: Fanglong Yao, Yuanchang Yue, Youzhi Liu, Xian Sun, Kun Fu 单位:中国科学院空天信息创新研究院网络信息系统技术重点实验室,中国科学院大学电子电气与通信工程学院 原文链接: AeroVerse: UAV-Agent Benchmark Suite fo…...
Python安装(新手详细版)
前言 第一次接触Python,可能是爬虫或者是信息AI开发的小朋友,都说Python 语言简单,那么多学一些总是有好处的,下面从一个完全不懂的Python 的小白来安装Python 等一系列工作的记录,并且遇到的问题也会写出,…...
Oracle DG备库数据文件损坏修复方法(ORA-01578/ORA-01110)
今天负责报表的同事反馈在DG库查询时出现如下报错 ORA-01578:ORACLE数据块损坏(文件号6,块号 2494856)ORA-01110:数据文件6: /oradata/PMSDG/o1 mf users_molczgmn_.dbfORA-26040:数据块是使用 NOLOGGING 选项加载的 可以看到报错是数据文件损坏,提示了file id和b…...
Java 25 字符串模板与文本块增强:更优雅的字符串处理
Java 25 字符串模板与文本块增强:更优雅的字符串处理别叫我大神,叫我 Alex 就好。今天我们来聊聊 Java 25 中的字符串模板与文本块增强,这些特性让字符串处理变得更加简洁和优雅。一、引言 在现代 Java 开发中,字符串处理是一项常…...
LinkSwift:基于JavaScript的网盘直链解析技术架构分析
LinkSwift:基于JavaScript的网盘直链解析技术架构分析 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...
Xamarin开发者必看:用CommunityToolkit.Mvvm简化跨平台移动开发(支持iOS/Android全版本)
Xamarin开发者必看:用CommunityToolkit.Mvvm简化跨平台移动开发(支持iOS/Android全版本) 在跨平台移动开发领域,Xamarin一直以其原生性能和代码共享优势占据重要地位。然而,随着项目规模扩大,传统的MVVM实现…...
面试官问我Floyd算法,我画了张图就讲明白了(附Java代码实现)
用一张图讲透Floyd算法:从三重循环到动态规划的精妙拆解 面试官推了推眼镜,在白板上画出一个带权图:"能解释下Floyd算法如何计算任意两点间最短路径吗?"作为过来人,我深知这是考察动态规划思想的经典问题。不…...
如何用genshin-wish-export快速导出原神抽卡记录:完整免费指南
如何用genshin-wish-export快速导出原神抽卡记录:完整免费指南 【免费下载链接】genshin-wish-export Easily export the Genshin Impact wish record. 项目地址: https://gitcode.com/GitHub_Trending/ge/genshin-wish-export 你是否曾为原神抽卡记录无法导…...
3个步骤掌握AMD Ryzen系统调试:SMUDebugTool完整入门指南
3个步骤掌握AMD Ryzen系统调试:SMUDebugTool完整入门指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:/…...
突破Windows远程桌面限制:RDPWrap多用户并发连接实战指南
突破Windows远程桌面限制:RDPWrap多用户并发连接实战指南 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap RDPWrap是一个开源工具,能够为Windows家庭版和专业版系统解锁远程桌面协议的多用户…...
NIUSHOP V6 多商户 B2B2C 商城系统介绍
多商户 B2B2C 商城系统是专为企业打造“平台多商户”协同运营的电商生态,支持平台自营第三方店铺入驻混合模式,覆盖实物电商、本地生活、O2O 全场景,支持多城市多商圈精细化运营,实现商品、订单、资金、数据全链路统一管理。 系统…...
Cosmos-Reason1-7B在复杂网络协议分析中的应用场景
Cosmos-Reason1-7B在复杂网络协议分析中的应用场景 网络工程师的日常,常常伴随着海量的数据包和复杂的协议交互。面对一个动辄几个G的抓包文件,如何快速定位一次握手失败的原因,或者解释某个应用为何响应缓慢,往往需要深厚的协议…...
Ubuntu音频架构演进:从PulseAudio到PipeWire的配置实战与蓝牙修复
1. Ubuntu音频架构演进:从PulseAudio到PipeWire的技术背景 如果你最近升级到Ubuntu 22.04或更高版本,可能会发现音频系统变得不太一样了。这背后是Ubuntu正在经历一场音频架构的重大变革——从传统的PulseAudio逐步过渡到新一代的PipeWire。我刚开始接触…...
