SpringBoot 拦截器
拦截器的概念拦截器顾名思义就是在请求到达目标接口之前 “拦一下”做完我们指定的操作后再决定是放它继续走还是直接把它拦下。举个生活中的例子我们去银行办理业务进门后不会直接找柜员而是要先取号、安检 —— 这两步就相当于 “拦截器”。如果带了身份证、取号成功就放行去窗口办业务对应接口正常执行如果没带身份证取号失败就直接被拦下没法办业务对应请求被拒绝等业务办完后还能给柜员评价这就是请求执行完后的拦截操作。放到 SpringBoot 项目里拦截器就是在请求到达 Controller 接口前后执行我们预先写好的代码比如登录校验、日志记录、参数校验这些通用操作不用在每个接口里重复写大大减少冗余代码。拦截器的核心执行时机三个关键方法拦截器的核心是实现Spring的HandlerInterceptor接口里面有三个核心方法对应请求的不同阶段1. preHandle请求到达接口前执行最常用这是拦截器最核心的方法请求发过来后第一个执行的就是它。这个方法返回true表示放行请求继续走直到到达 Controller 接口这个方法返回false表示拦截请求直接被打回后续的接口、其他拦截方法都不会执行。我们平时做的登录校验主要就是在这个方法里写。2. postHandle接口执行完后执行当preHandle放行且 Controller 接口的代码执行完毕后会执行这个方法。3. afterCompletion整个请求结束后执行这是拦截器的最后一个方法当接口执行完、响应数据已经返回给前端后执行一般用来做资源清理比如关闭流、释放连接。简单总结执行顺序preHandle(请求前)→ 执行 Controller 接口 →postHandle(接口后)→ 返回响应 →afterCompletion(请求结束)。用在登录校验的拦截器1.定义拦截器写好校验逻辑我们首先需要新建一个拦截器类实现HandlerInterceptor接口重写preHandle方法做登录校验其他方法按需重写即可。核心逻辑从 Session 中获取用户信息有就放行没有就拦截并返回 “未登录”。Component Slf4j // 日志注解方便看执行过程 public class LoginInterceptor implements HandlerInterceptor { // 核心请求到达接口前做登录校验 Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info(preHandle目标方法执行之前); // 获取Session参数为false表示如果没有Session就不新建新得到Session对象 HttpSession session request.getSession(false); // 校验Session中是否有用户信息 if (session null || session.getAttribute(loginUser) null) { log.warn(用户未登录); // 设置响应编码避免中文乱码 response.setContentType(text/html;charsetutf-8); // 设置响应状态码401未认证 response.setStatus(401); // 给前端返回提示信息 response.getOutputStream().write(用户未登录请先登录.getBytes(UTF-8)); return false; // 拦截请求 } // 有用户信息放行 log.info(用户已登录放行请求); return true; } }2.注册配置拦截器告诉 Spring 要拦截哪些请求当我们定义好拦截器之后Spring 还不知道要把它用在哪些请求上需要新建一个配置类告诉 Spring哪些请求要拦截哪些请求不需要拦截比如登录接口本身肯定不能拦截。这个配置类需要实现WebMvcConfigurer接口并重写重写addInterceptors方法完成注册Configuration public class WebConfig implements WebMvcConfigurer { Autowired private LoginInterceptor loginInterceptor; Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor) .addPathPatterns(/book/**); //这表示拦截/book目录之下的任意级路径 }上图是关于路径配置的一些讲解。总结拦截器是 SpringBoot 中处理通用请求逻辑的神器核心就是 “统一拦截、按需处理”。本文针对拦截器主要讲了以下三点拦截器的作用在请求到达接口前后执行通用逻辑减少冗余代码核心方法preHandle请求前最常用返回 true 放行、false 拦截使用步骤定义拦截器实现接口 写逻辑注册拦截器配置拦截 / 排除路径

相关新闻

javascript数组之循环

javascript数组之循环

第一种遍历数组的循环&#xff0c;使用for循环for(let i0;i<arrary.length;i){console.log(arrary[i])}第二种遍历数组的循环&#xff0c;使用for-in&#xff0c;这里遍历的是数组下标for(let index in arrary){console.log(arrary[index])}第三种遍历方式是for-offor(let j…

2026/7/5 18:31:19 阅读更多 →
热销复盘:招商林屿缦岛203套售罄背后的客户逻辑分析

热销复盘:招商林屿缦岛203套售罄背后的客户逻辑分析

招商林屿缦岛首开203套售罄的市场表现&#xff0c;不仅是数据的胜利&#xff0c;更是客户选择的集中呈现。深入分析购房群体的构成与决策逻辑&#xff0c;能够帮助我们更好地理解当下改善市场的真实需求与价值取向。本文通过对多位购房者的访谈与调研&#xff0c;试图还原这场热…

2026/7/5 17:46:41 阅读更多 →
大数据领域Kafka的性能优化最佳实践

大数据领域Kafka的性能优化最佳实践

大数据领域Kafka的性能优化最佳实践 关键词&#xff1a;Kafka、性能优化、消息队列、吞吐量、延迟、批量处理、分区策略 摘要&#xff1a;在大数据场景下&#xff0c;Kafka作为分布式消息队列的“顶流”&#xff0c;常被用于实时数据管道和流处理系统。但很多开发者遇到过“Kaf…

2026/5/17 3:28:31 阅读更多 →

最新新闻

踩坑半年总结:C#部署YOLO最容易忽略的8个工业级细节

踩坑半年总结:C#部署YOLO最容易忽略的8个工业级细节

前言 网上关于C#部署YOLO的教程铺天盖地,但90%都停留在“跑通Demo”的阶段。真正把模型塞进产线、扛住724小时运行、应对各种边缘Case后,你才会发现:能跑和能用之间,隔着一整条护城河。 本文不讲基础环境搭建,只聊我在过去半年工业落地中用血泪换来的8个细节。每一个都是深…

2026/7/6 14:11:07 阅读更多 →
【VTG】T2SGrid: Temporal-to-Spatial Gridification for VTG

【VTG】T2SGrid: Temporal-to-Spatial Gridification for VTG

note T2SGrid 的最大贡献在于范式创新&#xff1a;它没有直接设计复杂的时间模块&#xff0c;而是巧妙地借用了视觉大模型原生的空间注意力机制&#xff0c;将时间流转化为空间网格。把视频多帧拼成一张网格图&#xff08;把视频 clip 拼成网格图&#xff09;&#xff0c;让普…

2026/7/6 14:11:07 阅读更多 →
Auto memory,把 Claude Code 从临时搭档变成项目老同事

Auto memory,把 Claude Code 从临时搭档变成项目老同事

最近在研究 Claude Code 的记忆机制时,我一直觉得 Auto memory 这个功能被低估了。很多人把 Claude Code 当成一个会写代码、能跑命令、能改文件的终端助手,但真正把它和普通聊天式编程助手拉开距离的地方,不只是它能操作代码仓库,而是它可以在一次次会话之间沉淀项目经验。…

2026/7/6 14:09:05 阅读更多 →
多设备传动改造:盖茨工业皮带的工程应用经验复盘

多设备传动改造:盖茨工业皮带的工程应用经验复盘

摘要工厂多类型设备同步开展传动系统技改时&#xff0c;普遍存在工况混杂、传动结构差异化大、原有传动故障根源复杂、改造标准不统一等工程难题。大量现场技改数据统计&#xff0c;85% 以上改造后皮带仍短期失效&#xff0c;并非配件本体性能不足&#xff0c;而是前期故障诊断…

2026/7/6 14:09:05 阅读更多 →
CP-ABE代理重加密与混合检测技术构建动态数据安全闭环

CP-ABE代理重加密与混合检测技术构建动态数据安全闭环

1. 项目概述&#xff1a;当数据安全遇上智能防御 最近在梳理一些前沿的数据安全与网络防御方案时&#xff0c;一个组合技术方案引起了我的注意&#xff0c;那就是“密文策略属性基代理重加密”与“应用层攻击混合检测技术”的结合。这听起来像是一串复杂的技术名词堆砌&#xf…

2026/7/6 14:07:03 阅读更多 →
【私房菜集 HarmonyOS ArkTS 实战系列 06】菜谱详情页:大图、用料、步骤与忌口提醒的页面组织

【私房菜集 HarmonyOS ArkTS 实战系列 06】菜谱详情页:大图、用料、步骤与忌口提醒的页面组织

【私房菜集 HarmonyOS ArkTS 实战系列 06】菜谱详情页&#xff1a;大图、用料、步骤与忌口提醒的页面组织 第 05 篇完成了探索与搜索链路&#xff1a;用户可以通过关键词、分类和列表找到目标菜谱。本篇继续进入菜谱详情页&#xff0c;拆解 RecipeDetailPage 如何承接 recipeId…

2026/7/6 14:07:03 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性&#xff1a;5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域&#xff0c;单元测试是保证代码质量的重要环节。当应用涉及数据库操作时&#xff0c;测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南&#xff1a;用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南&#xff1a;告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况&#xff1a;下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻