news 2026/6/10 9:18:19

SpringBoot 拦截器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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;charset=utf-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 中处理通用请求逻辑的神器,核心就是 “统一拦截、按需处理”。本文针对拦截器主要讲了以下三点:

  1. 拦截器的作用:在请求到达接口前后执行通用逻辑,减少冗余代码
  2. 核心方法:preHandle(请求前,最常用)返回 true 放行、false 拦截
  3. 使用步骤:定义拦截器(实现接口 + 写逻辑)+注册拦截器(配置拦截 / 排除路径)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 10:44:20

34-学习笔记尚硅谷数仓搭建-DWS层最近一日汇总表建表语句汇总

目录 一、交易域用户商品粒度订单最近1日汇总表 二、交易域用户粒度订单最近1日汇总表 三、交易域用户粒度加购最近1日汇总表 四、交易域用户粒度支付最近1日汇总表 五、交易域省份粒度订单最近1日汇总表 六、工具域用户优惠券粒度优惠券使用(支付)最近1日汇总表 七、互动…

作者头像 李华
网站建设 2026/6/10 10:44:26

小程序毕设项目:基于springboot+小程序的高校毕业生服务管理系统小程序(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/10 10:44:34

我有 8种从 Spring中获取 Bean的方式!

1、在初始化时保存ApplicationContext对象 适用于Spring框架的独立应用程序&#xff0c;须要程序通过配置文件初始化Spring。 applicationContext.xml配置&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.…

作者头像 李华
网站建设 2026/6/10 11:46:57

【计算机毕业设计案例】基于springboot+小程序的个性化食谱推荐系统小程序于微信小程序的健康饮食推荐系统(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/10 11:45:55

【GitHub项目推荐--AI自动生成小说:智能创作生产力工具】⭐⭐⭐

功能速览 思维导图.png 可拖拽的思维导图 智能按照句子、段落、字符数智能切割 和预览 设定好分数和迭代次数 完整功能界面&#xff0c;支持多种智能写作辅助功能 智能右键润色功能 智能AI右键润色功能 AI智能书名生成功能展示 AI智能简介生成功能展示 简介 AI自动生成小说是…

作者头像 李华
网站建设 2026/6/10 11:46:58

【毕业设计】基于springboot+小程序的自助停车缴费系统小程序的设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华