news 2026/4/23 18:40:38

Java 拦截器 2025 终极指南:从入门到“卷死”同事

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 拦截器 2025 终极指南:从入门到“卷死”同事

一、什么是拦截器?一句话看懂

拦截器 = “请求/方法” 的横切逻辑植入器: 让你不改业务代码,就能在目标执行前后统一加戏——鉴权、日志、限流、事务、国际化 … 统统安排。

二、三大实现方式一张表看懂

类型

技术根

拦截粒度

能否截静态资源

典型场景

配置姿势

Servlet Filter

JSP 时代遗产

请求级

编码、CORS、HTTPS 强制

web.xml / @WebFilter

Spring HandlerInterceptor

Spring MVC

Controller 级

登录态、接口计时、失败统一包装

WebMvcConfigurer

AOP Interceptor

Spring AOP

方法级(任意 Bean)

事务、缓存、方法日志

@Aspect + @Around

一句话记忆: 请求级用 HandlerInterceptor,方法级用 AOP,底层通用用 Filter。

三、SpringMVC 拦截器 5 分钟落地

1.实现接口

public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) { // 1. 前置逻辑:鉴权、参数校验、日志... return true; // true 继续;false 中断 } @Override public void postHandle(...) { /* 2. Controller 后、渲染前 */ } @Override public void afterCompletion(...) { /* 3. 全部完成 */ } }

2.注册

@Configuration public class WebConfig implements WebMvcConfigurer { public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()).addPathPatterns("/api/**").excludePathPatterns("/login"); } }

3.执行顺序 preHandle 正序 → Controller → postHandle 逆序 → 渲染 → afterCompletion 逆序 (先注册的先执行前置,后执行后置)

四、2025 最新玩法(Lambda、响应式、原生镜像)

1.Lambda 式注册(Spring Boot 3.2+) 不再需要 @Configuration:

@Bean public InterceptorRegistrationFunction myInterceptor() { return registry -> registry .addInterceptor((req, resp, h) -> { /* 逻辑 */ }) .addPathPatterns("/api/**"); }

2.响应式 WebFilter(Spring 6 + WebFlux)

@Component public class ReactiveAuthFilter implements WebFilter { public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { return chain.filter(exchange) .contextWrite(ctx -> ctx.put("tenantId", parseTenant(exchange))); } }

3.GraalVM Native 友好 native-image 禁止反射,必须显式声明:

@RegisterReflection({MyInterceptor.class}) public class MyInterceptor implements HandlerInterceptor {}

编译后体积 50 MB,启动 0.05 s。

五、进阶骚操作

需求

实现要点

运行时热插拔

把 InterceptorRegistry 注入,代码里 addInterceptor 即时生效,后台点按钮就灰度。

多租户线程穿透

用 TransmittableThreadLocal(阿里 TTL),线程池、异步照样传递 tenantId。

透明刷新 Token

在 preHandle 解析旧 JWT,响应头带回新 Token,前端无感替换。

内存令牌桶限流

ConcurrentHashMap + Guava RateLimiter,单机 1 ms 级拒绝,无需网关。

差分响应

用 JSON-Patch 对比“本次 vs 缓存”,只给前端变化字段,移动端省流 90%。

请求火焰图

afterCompletion 里把各阶段耗时写成 pprof 格式,上传 FlameGraph 服务器,3 min 出图,比 Zipkin 更直观。

六、一张脑图带走

Java 拦截器 2025 ├─ 传统三剑客(Filter/HandlerInterceptor/AOP) ├─ 最新实现 │ ├─ Lambda 注册(Boot 3.2+) │ ├─ Reactive WebFilter(Spring 6) │ └─ GraalVM 原生 └─ 黑科技 ├─ 热插拔 & TTL 多租户 ├─ 内存限流 & 差分响应 └─ 请求火焰图

七、最佳实践口诀

  1. 拦截器链能少就少,IO/DB 耗时操作异步化。

  2. preHandle 返回 false 时,一定自己回写 JSON,否则空白响应。

  3. 高优拦截器靠前注册;用 @Order 控制顺序。

  4. 生产加开关 + 熔断,防止拦截器故障拖垮全站。

  5. 复杂业务(事务、缓存)交给 AOP,让拦截器保持简洁。

八、结语

从 JSP 时代的 Filter,到 Spring MVC 的 HandlerInterceptor,再到 2025 的 Lambda 注册、响应式、GraalVM 原生,拦截器技术栈已全面进化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 14:13:56

Miniconda-Python3.9环境下使用PyTorch Serving部署API

Miniconda-Python3.9环境下使用PyTorch Serving部署API 在AI模型从实验室走向生产环境的过程中&#xff0c;一个常见的困境是&#xff1a;为什么本地能跑通的代码&#xff0c;一到服务器就报错&#xff1f; 更具体地说&#xff0c;是不是经常遇到这样的问题——“ModuleNotFoun…

作者头像 李华
网站建设 2026/4/23 12:47:37

PyTorch模型训练中断?检查Miniconda-Python3.9环境稳定性

PyTorch模型训练中断&#xff1f;检查Miniconda-Python3.9环境稳定性 在深度学习项目中&#xff0c;最令人沮丧的场景之一莫过于&#xff1a;经过数小时甚至数天的训练后&#xff0c;PyTorch模型突然崩溃&#xff0c;终端只留下一行模糊的 Segmentation fault 或 CUDA error: i…

作者头像 李华
网站建设 2026/4/23 12:47:29

Miniconda与PyTorch完美结合:打造轻量级AI实验环境

Miniconda与PyTorch完美结合&#xff1a;打造轻量级AI实验环境 在深度学习项目日益复杂的今天&#xff0c;一个常见的场景是&#xff1a;你从同事那里拿到一份代码仓库&#xff0c;兴冲冲地准备复现实验结果&#xff0c;却卡在了环境配置上——torchvision 版本不兼容、CUDA 驱…

作者头像 李华
网站建设 2026/4/22 22:53:06

企业微信外部群消息发送全攻略

QiWe开放平台提供了后台直登功能&#xff0c;登录成功后获取相关参数&#xff0c;快速Apifox在线测试&#xff0c;所有登录功能都是基于QiWe平台API自定义开发。 核心前提&#xff1a;获取 chat_id 外部群消息发送的前提是&#xff1a;你的应用&#xff08;自建应用或代开发应…

作者头像 李华
网站建设 2026/4/23 8:17:31

把 ST22 里的短 Dump 关进笼子:ABAP 程序避免崩溃的体系化手法(含 GUI_UPLOAD、Gateway、RAP 与 Tail Recursion 案例)

在 ABAP 世界里,short dump 往往像一次断电:业务流程被硬生生打断,用户只看到一串看不懂的技术细节,开发者转头去 ST22 做事后取证。ST22 确实是定位问题的核心入口,但更成熟的做法是:把可预期的失败变成可理解的消息,把不可预期的异常变成可追踪的日志,让程序在出问题…

作者头像 李华
网站建设 2026/4/23 14:59:16

高效AI开发首选:Miniconda-Python3.9 + PyTorch GPU集成方案

高效AI开发首选&#xff1a;Miniconda-Python3.9 PyTorch GPU集成方案 在深度学习项目日益复杂的今天&#xff0c;一个开发者最怕的不是模型不收敛&#xff0c;而是——“在我机器上明明能跑&#xff01;”这种尴尬往往源于环境不一致&#xff1a;版本冲突、依赖缺失、GPU支持…

作者头像 李华