Springboot核心:拦截器
拦截器是 Spring 框架提供的核心功能之一,属于一种设计模式,它允许在某个方法调用或请求处理前后执行自定义逻辑,是一种AOP(面向切面编程)机制。它们可以在不修改原有业务逻辑的情况下,对进入系统的请求进行预处理和后处理。
这种场景就类似我们现实生活中去银行办理业务:去银行办业务柜员首先需要的就是身份证,如果没有身份证,就不能取号,更不能办理后续的业务;有就去取号,然后排队等待,办理自己的业务。
拦截器在这里就相当于柜员,会首先询问有没有携带身份证,有身份证才能办理后续的业务,没有就没法办理业务,需要回家拿身份证。
□ 使用场景
身份验证与授权:在进入控制器之前验证用户身份,确保只有经过认证和授权的用户才能访问某些资源。
日志记录:记录所有请求的信息,包括时间戳、来源IP地址、HTTP方法、URI等
性能监控:记录每个请求的处理时间,收集统计数据以优化系统性能。
数据转换:在请求到达控制器前或响应返回客户端前对数据进行格式化或转换。
全局异常处理:捕获未处理的异常,并返回统一格式的错误信息给客户端。
□ 快速使用
实现HandlerInterceptor接口:
自定义拦截器,实现HandlerInterceptor接口,并重写所有方法。这是最直接的方式,适用于所有版本的SpringMVC。
@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler) throws Exception {log.info("LoginInterceptor ⽬标⽅法执⾏前执⾏..");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler, ModelAndView modelAndView) throws Exception {log.info("LoginInterceptor ⽬标⽅法执⾏后执⾏");}@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) throws Exception {log.info("LoginInterceptor 视图渲染完毕后执⾏,最后执⾏");}
}
定义配置类,在配置类中编写我们要拦截哪些请求路径映射,放行哪些请求路径的映射。
@Configuration
public class MyConfig implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns("/**") //拦截所有的 url.excludePathPatterns("/user/login")//排除url: /user/login (登录).excludePathPatterns("/user/reg") //排除url: /user/reg (注册).excludePathPatterns("/image/**")//排除 image(图像) 文件夹下的所有文件.excludePathPatterns("/**/*.js")//排除任意深度目录下的所有".js"文件.excludePathPatterns("/**/*.html").excludePathPatterns("/**/*.css");}
}
也可以定义集合,把要排除的路径都放进集合中:
//定义一个集合,把要排除的路径都放进集合中
@Configuration
public class MyConfig implements WebMvcConfigurer {@AutowiredLoginInterceptor loginInterceptor;private List<String> excludePaths = Arrays.asList("/user/login","/user/reg","/image/**","/css/**","/js/**","/**/*.html");@Overridepublic void addInterceptors(InterceptorRegistry registry) {//注册自定义拦截器对象registry.addInterceptor(loginInterceptor).addPathPatterns("/**")//设置拦截器拦截的请求路径.excludePathPatterns(excludePaths)//设置拦截器排除拦截的路径;}
}
拦截器中常见的拦截路径设置:
拦截路径 | 解析 | 示例 |
---|---|---|
/* | 一级路径 | 一级路径/user,/cust,/report可以匹配;二级路径及多级/user/login,/cust/risk/level不能匹配 |
/** | 所有路径 | /user,/user/login,/cust/risk/level都能匹配 |
/user/* | user路径下的一级路径 | user下的一级路径/user/login可以匹配;多级路径/user/risk/level不可以 |
/user/** | user路径下的所有路径 | user下的路径/user,/user/login,/user/risk/level都能匹配 |
-
拦截器 vs 过滤器
虽然拦截器和过滤器都能用来处理请求/响应,但它们有一些重要的区别:
-
作用范围:
过滤器:适用于所有的Servlet请求,包括静态资源文件。
拦截器:仅限于Spring MVC框架内的请求,即那些会被映射到控制器的方法上。 -
功能差异:
过滤器:更适合做与业务无关的操作,例如编码转换、GZIP压缩等。
拦截器:更贴近业务逻辑,适合做权限控制、日志记录、数据预处理等工作。 -
生命周期:
过滤器:由Servlet容器管理其生命周期。
拦截器:由Spring容器管理,因此可以利用依赖注入等功能。
-
☆ 参考:文章 FC464782123
相关文章:
Springboot核心:拦截器
拦截器是 Spring 框架提供的核心功能之一,属于一种设计模式,它允许在某个方法调用或请求处理前后执行自定义逻辑,是一种AOP(面向切面编程)机制。它们可以在不修改原有业务逻辑的情况下,对进入系统的请求进行预处理和后…...
【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录解决方案
【AI学习笔记】基于UnityDeepSeek开发的一些BUG记录&解决方案 背景前摇:(省流可不看) Unity是大学学的,AI是研究生学的,DeepSeek是第一份实习偷师的,三合一的梦是最近开始做的,BUG是今天遇…...
六西格玛设计培训如何破解风电设备制造质量与成本困局
2023年,中国风电行业装机容量突破4.3亿千瓦,稳居全球第一,但高速扩张背后暗藏隐忧: 质量痛点:叶片开裂、齿轮箱故障等缺陷频发,运维成本占项目全生命周期成本超30%;成本压力:原材料…...
xml 和json互转工具
工具1 有个问题会导致springboot返回捕获的异常编程xml格式 import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import org.json.JSONObject; import org.json.XML; import org.w3c.dom.Document;import javax.xm…...
【STM32】舵机SG90
1.舵机原理 舵机内部有一个电位器,当转轴随电机旋转,电位器的电压会发生改变,电压会带动转一定的角度,舵机中的控制板就会电位器输出的电压所代表的角度,与输入的PWM所代表的角度进行比较,从而得出一个旋转…...
【RK3588嵌入式图形编程】-SDL2-鼠标输入处理
鼠标输入处理 文章目录 鼠标输入处理1、概述2、鼠标移动事件3、鼠标点击事件4、鼠标点击位置5、鼠标双击6、鼠标进入和离开事件7、总结在本文中,将介绍如何在 SDL2 中检测和处理鼠标输入事件,包括鼠标移动、按钮点击以及窗口进入/退出。 1、概述 在本文中,我们将详细介绍如…...
知识管理成功:关键指标和策略,研究信息的投资回报率
信息过载会影响生产力。没有人工智能的帮助,信息过载会影响生产力。大量的可用信息,知识工作者不仅仅是超负荷工作;他们感到不知所措,他们倾向于浪费时间(和脑细胞)来应付他们被大量的数据抛向他们…...
Linux权限提升-内核溢出
一:Web到Linux-内核溢出Dcow 复现环境:https://www.vulnhub.com/entry/lampiao-1,249/ 1.信息收集:探测⽬标ip及开发端⼝ 2.Web漏洞利⽤: 查找drupal相关漏洞 search drupal # 进⾏漏洞利⽤ use exploit/unix/webapp/drupal_dr…...
Bootstrap5 折叠功能详解
Bootstrap5 折叠功能详解 引言 Bootstrap 是一个流行的前端框架,它提供了许多组件和工具,使得开发者可以轻松构建响应式网站。在 Bootstrap5 中,折叠(Collapse)组件得到了增强,使其更加灵活和易于使用。本…...
JAVA:Spring Boot 项目中自定义 Banner 的技术指南
1、简述 在 Spring Boot 项目中,当应用启动时会显示默认的 Spring 标志和版本信息。定制化的启动 Banner 不仅可以美化应用,还能在项目中增加个性化的品牌印记,甚至可以提供一些关键信息。本文将介绍如何在 Spring Boot 项目中自定义启动 Ba…...
【虚幻引擎UE】UE4.23到UE5.5的核心功能变化
简单总结从UE4.23到UE5.5,虚幻引擎的重大变化: 1. WebGL/HTML5 平台支持和像素流 UE4.23-UE4.25:移除官方HTML5支持,改为社区插件维护。 但通过第三方插件(如WebAssemblyWebGPU)可在浏览器运行部分项目。U…...
信号检测和信道均衡的联系
1. 系统模型 假设一个通信系统的数学模型如下: 发送信号: s [ s 1 , s 2 , … , s N ] T \mathbf{s} [s_1, s_2, \dots, s_N]^T s[s1,s2,…,sN]T,其中 s i s_i si 是发送符号。信道矩阵: H \mathbf{H} H(…...
在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档教程
既然我们已经在本地部署了DeepSeek,肯定希望能够利用本地的模型对自己软件开发、办公文档进行优化使用,接下来就先在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档的教程奉上。 前提: (1)已经部署好了DeepSeek,可以看我的文章:个人windows电脑上安装DeepSe…...
26、深度学习-自学之路-NLP自然语言处理-理解加程序,怎么把现实的词翻译给机器识别。
一、怎么能让机器能够理解我们的语言呢,我们可以利用神经网络干很多的事情,那么我们是不是也可以用神经元做自然语言处理呢,现在很多的实际应用已经说明了这个问题,可以这么做。 那我们考虑一下该怎么做,首先我们应该…...
微信服务号推送消息
这里如果 没有 就需要点新的功能去申请一下 申请成功之后就可以设置模版消息 推送到用户接受的页面是 需要后端调用接口 传递token 发送给客户...
Excel常用操作
Excel常用操作 学习资源 37_电子表格处理考点精讲_设置数据格式_哔哩哔哩_bilibili 快速输入数据与编辑数据 一个工作簿可以包含多个工作表 特殊数据的添加格式 输入负数, 例如-3、-5 常规输入, 直接输入-3、-5;使用(), 例如在单元格中输入(3)回车即可变为-3;上述括号不区分中…...
得物端智能视频封面推荐
一、背景 什么要做智能封面? 用户可以在得物购物,也可以在得物社区分享自己的生活。 得物社区中的视频使用双列流,每条内容包含封面、标题等。 对得物社区的创作者而言,选择视频封面是创作链路的重要环节。对得物社区的消费者…...
【Stable Diffusion部署至GNU/Linux】安装流程
以下是安装Stable Diffusion的步骤,以Ubuntu 22.04 LTS为例子。 显卡与计算架构介绍 CUDA是NVIDIA GPU的专用并行计算架构 技术层级说明CUDA Toolkit提供GPU编译器(nvcc)、数学库(cuBLAS)等开发工具cuDNN深度神经网络加速库(需单独下载)GPU驱动包含CUDA Driver(需与CUDA …...
介绍 Liquibase、Flyway、Talend 和 Apache NiFi:选择适合的工具
在现代软件开发中,尤其是在数据库管理和数据集成方面,选择合适的工具至关重要。本文将介绍四个流行的工具:Liquibase、Flyway、Talend 和 Apache NiFi,分析它们的应用、依赖以及如何选择适合的工具。 1. Liquibase 简介ÿ…...
Unity 接入Tripo 文生模型,图生模型
官方网站:https://www.tripo3d.ai/app/home自行注册账号并且登陆下载Unity插件:https://cdn-web.tripo3d.ai/plugin/tripo-unity.zip申请apikey: https://platform.tripo3d.ai/api-keys使用(后续过程就按照第二步下载的插件里面的…...
黑马Redis详细笔记(实战篇---短信登录)
目录 一.短信登录 1.1 导入项目 1.2 Session 实现短信登录 1.3 集群的 Session 共享问题 1.4 基于 Redis 实现共享 Session 登录 一.短信登录 1.1 导入项目 数据库准备 -- 创建用户表 CREATE TABLE user (id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,phone …...
Unity 增量打包AssetBundle
背景 打包太慢了,想要没改动的资源不重新打包浪费时间。 来源 官方文章:https://forum.unity.com/threads/about-incremental-build-and-asset-bundle-hashes.1436032/ 官网AB介绍:https://learn.unity.com/tutorial/assets-resources-and…...
前端 TypeError 错误永久消失术
作者:来自 vivo 互联网大前端团队- Sun Maobin 通过开发 Babel 插件,打包时自动为代码添加 可选链运算符(?.),从而有效避免 TypeError 的发生。 一、背景介绍 在 JS 中当获取引用对象为空值的属性时,程序会立即终止运行并报错&…...
【视频总结】Deep Dive into LLMs like ChatGPT 深入探索像ChatGPT这样的大语言模型|Andrej Karpathy
【视频总结】Deep Dive into LLMs like ChatGPT 深入探索像ChatGPT这样的大语言模型|Andrej Karpathy 大型语言模型(LLM)工作原理与使用指南核心观点模型训练三阶段1. 预训练阶段2. 后训练阶段(Post-training)3. 强化学…...
内网ip网段记录
1.介绍 常见的内网IP段有: A类: 10.0.0.0/8 大型企业内部网络(如 AWS、阿里云) 10.0.0.0 - 10.255.255.255 B类:172.16.0.0/12 中型企业、学校 172.16.0.0 - 172.31.255.255 C类:192.168.0.0/16 家庭…...
本地部署DeepSeek + AnythingLLM 搭建高效安全的个人知识库
环境准备: 本地部署方案请参考博客:windows平台本地部署DeepSeek大模型+Open WebUI网页界面(可以离线使用)-CSDN博客 windows平台本地部署DeepSeek大模型+Chatbox界面(可以离线使用)-CSDN博客 根据本人电脑配置:windows11 + i9-13900HX+RTX4060+DDR5 5600 32G内存 确…...
Xcode证书密钥导入
证书干嘛用 渠道定期会给xcode证书,用来给ios打包用,证书里面有记录哪些设备可以打包进去。 怎么换证书 先更新密钥 在钥匙串访问中,选择系统。(选登录也行,反正两个都要导入就是了)。 mac中双击所有 .p12 后缀的密钥ÿ…...
机械学习基础-5.分类-数据建模与机械智能课程自留
data modeling and machine intelligence - CLASSIFICATION 为什么我们不将回归技术用于分类?贝叶斯分类器(The Bayes Classifier)逻辑回归(Logistic Regression)对逻辑回归的更多直观理解逻辑 /sigmoid 函数的导数我们…...
springcloud集成gateway
本篇文章只介绍gateway模块的搭建步骤,并无gateway详细介绍 gateway详解请查看:SpringCloudGateway官方文档详解 前置处理 父模块中已指定版本 不知道如何选择版本看这篇: 手把手教你梳理springcloud与springboot与springcloudalibaba的版本…...
RocketMQ之偏移量Offset
偏移量:偏移量是 ConsumerQueue 文件中的逻辑位置,表示消息在队列中的顺序。每次消费通过偏移量在索引文件ConsumerQueue中快速找到对应的消息内容。 1.Broker端 Broker端主要通过ConsumerManageProcessor类来处理Offset的更新查询的请求,真…...
2024-2025年主流的开源向量数据库推荐
以下是2024-2025年主流的开源向量数据库推荐,涵盖其核心功能和应用场景: 1. Milvus 特点:专为大规模向量搜索设计,支持万亿级向量数据集的毫秒级搜索,适用于图像搜索、聊天机器人、化学结构搜索等场景。采用无状态架…...
Redis 集群(Cluster)和基础的操作 部署实操篇
三主三从 集群概念 Redis 的哨兵模式,提高了系统的可用性,但是正在用来存储数据的还是 master 和 slave 节点,所有的数据都需要存储在单个 master 和 salve 节点中。 如果数据量很大,接近超出了 master / slave 所在机器的物理内…...
RTD2775QT/RTD2795QT瑞昱显示器芯片方案
RTD2775QT与RTD2795QT:高性能4K显示驱动芯片 RTD2775QT与RTD2795QT是瑞昱半导体公司推出的两款高性能显示驱动芯片,专为满足现代显示设备对高清、高分辨率的需求而设计。这两款芯片不仅支持4K分辨率,还具备丰富的功能和卓越的性能࿰…...
Java进阶面试题
Java 进阶面试问题列表翻译自Java developer interview questions: The hard part,从属于笔者的Java入门与工程实践系列。最近公司打算招几个 Java 开发人员,正巧在 Reddit 上看到了该文,顺手翻译了一波。只是单纯的问题列表,可能…...
Spring Cloud-Sentinel
Sentinel服务熔断与限流 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。 官网地址:home | Sentinelhttps://sen…...
21道关于Vue3的面试题及其解析
Vue 3是一种流行的JavaScript框架,它是Vue.js的第三个主要版本,于2020年9月18日正式发布。关于Vue 3的一些关键信息: 文章目录 1. 性能优化2. 组合式API(Composition API)3. 响应式系统改进4. 更好的TypeScript支持5. …...
使用 Visual Studio Code (VS Code) 开发 Python 图形界面程序
安装Python、VS Code Documentation for Visual Studio Code Python Releases for Windows | Python.org 更新pip >python.exe -m pip install --upgrade pip Requirement already satisfied: pip in c:\users\xxx\appdata\local\programs\python\python312\lib\site-pa…...
深入理解 MyBatis 框架的核心对象:SqlSession
Mybatis框架中的SqlSession对象详解 引言 MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息࿰…...
day09_实时类标签/指标
文章目录 day09_实时类标签/指标一、日志数据实时采集2、Flume简介2.3 项目日志数据采集Flume配置2.3.1 涉及的Flume组件和参数2.3.2 Nginx日志采集2.3.3 用户行为日志采集 二、Nginx日志数据统计1、日志格式说明2、数据ETL2.1 日志抽取2.1.1 正则表达式2.1.2 基于Spark实现Ngi…...
AWTK-WEB 快速入门(4) - JS Http 应用程序
XMLHttpRequest 改变了 Web 应用程序与服务器交换数据的方式,fetch 是 XMLHttpRequest 继任者,具有更简洁的语法和更好的 Promise 集成。本文介绍一下如何使用 JS 语言开发 AWTK-WEB 应用程序,并用 fetch 访问远程数据。 用 AWTK Designer 新…...
github不翻墙就可以访问
目录 简介资料准备windows平台设置下载运行git设置firefox设置 ubuntu平台设置下载启动服务设置系统代理git设置firefox设置证书 注意事项 简介 由于github访问不稳定,严重影响了国内软件开发,在网上搜索并验证了一些方法.现在整理出来一个可以正常使用的方法, 在windows和Lin…...
【AI-32】浅显易懂地说一下LangChain
好的!我来用最通俗的方式解释一下 LangChain 是什么,以及它为什么在 AI 开发中如此重要。 一句话理解 LangChain LangChain 是一个帮你快速搭建AI应用的工具箱,它把大型语言模型(如 GPT)和外部数据、计算工具、业务流…...
使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)指南
在网络应用中,代理服务器是用于中转用户请求和服务端响应的工具。正向代理主要用于客户端与外部服务器之间的访问代理,帮助客户端隐藏其 IP 地址或访问受限资源。本文将详细介绍如何使用 Nginx 搭建正向代理服务器,特别是针对 HTTPS 网站的代…...
Linux学习笔记之进程
进程 进程的定义 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,也是操作系统结构的基础。 例如当QQ程序运行的时候,计算机会先从磁盘读取QQ程序到内存,然后OS管理这个程序,…...
win11 终端乱码导致IDE 各种输出也乱码
因为 win11 终端乱码导致IDE 各种输出也乱码导致作者对此十分头大。所以研究了各种方法。 单独设置终端编码对 HKEY_CURRENT_USER\Console 注册表进行修改对 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processo 注册表进行修改使用命令[Console]::OutputEncoding [Syst…...
iOS主要知识点梳理回顾-5-运行时方法交换
方法交换可以放在 load 或 initialize 方法中,也可以自己根据时机来空,比如开启某个开关后才需要交换方法。如果是在load中调用,交换工作会在类加载时(程序启动)自动调用;如果是在initialize中调用…...
python后端调用Deep Seek API
python后端调用Deep Seek API 需要依次下载 ●Ollama ●Deepseek R1 LLM模型 ●嵌入模型nomic-embed-text / bge-m3 ●AnythingLLM 参考教程: Deepseek R1打造本地化RAG知识库:安装部署使用详细教程 手把手教你:deepseek R1基于 AnythingLLM API 调用本地…...
Unity开发播放视频
Unity开发播放视频 介绍VideoPlayer原理步骤VideoPlayer动态加载 总结 介绍 原生Unity播放视频VideoPlayer播放视频,这里我没有选择使用插件,还有一个播放视频的插件也可以AVPro Video,这里不过多介绍就说一下原生VideoPlayer的基础用法。 …...
【练习】图论
F. Friendly Group 图中选择一个点-1 边两端点都选择1 边一个端点选择-1 添加链接描述 #include<iostream> using namespace std; #include<vector> #include<cstring> const int N300010; int n,m; vector<int> G[N]; int temp1,temp2; bool vis[N…...
gis风场加载
https://gitee.com/openGPL json数据格式使用v1 “sakitam-gis/mapbox-wind”: “1.1.2” import { WindLayer } from "sakitam-gis/mapbox-wind"; windLayer new WindLayer("wind", res.data, {windOptions: {// colorScale: (m) > {// // consol…...