news 2026/4/3 1:51:18

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/3/11 23:48:16

GPU利用率分析

GPU利用率详解一、GPU利用率是什么&#xff1f;GPU利用率&#xff08;GPU-Util&#xff09;是指GPU计算单元的使用率&#xff0c;反映了GPU的算力被利用了多少。nvidia-smi 输出示例&#xff1a; ---------------------------------------------------------------------------…

作者头像 李华
网站建设 2026/3/29 19:33:04

PyTorch时间序列预测项目环境搭建:Miniconda-Python3.9实操

PyTorch时间序列预测项目环境搭建&#xff1a;Miniconda-Python3.9实操 在金融高频交易、电力负荷调度、气象预报等场景中&#xff0c;准确的时间序列预测直接影响决策质量。而当我们着手构建基于PyTorch的LSTM或Transformer模型时&#xff0c;第一步往往不是写代码&#xff0c…

作者头像 李华
网站建设 2026/3/31 23:25:12

想当黑客该怎么做?小白入门必学的 12 个核心步骤

如何成为一名黑客&#xff1f;小白必学的12个基本步骤 如何成为一名黑客&#xff1f;小白必学的12个基本步骤 黑客攻防是一个极具魅力的技术领域&#xff0c;但成为一名黑客毫无疑问也并不容易。你必须拥有对新技术的好奇心和积极的学习态度&#xff0c;具备很深的计算机系统…

作者头像 李华
网站建设 2026/3/31 18:45:34

Miniconda-Python3.9中配置PyTorch Profiler进行性能分析

Miniconda-Python3.9中配置PyTorch Profiler进行性能分析 在深度学习项目开发过程中&#xff0c;我们常常会遇到这样的问题&#xff1a;模型训练速度远低于预期&#xff0c;GPU利用率长期徘徊在20%以下&#xff0c;显存占用却不断攀升。面对这类“卡顿”现象&#xff0c;仅靠打…

作者头像 李华
网站建设 2026/4/2 14:05:43

企业微信API高效群发实战指南

QiWe开放平台提供了后台直登功能&#xff0c;登录成功后获取相关参数&#xff0c;快速Apifox在线测试&#xff0c;所有登录功能都是基于QiWe平台API自定义开发。 核心前提 获取 ChatID&#xff1a;你不能直接通过群名发送。必须先通过“获取客户群列表”接口获取外部群的 chati…

作者头像 李华
网站建设 2026/3/31 7:54:03

把后台 Spool 里的错误变成可检索的 Application Log:SAP ABAP 应用日志从配置到封装的实战指南

在很多系统里,后台作业一旦出错,最直观的证据就是 Spool:一大串红字、堆栈、业务校验消息,量大且分散。对开发来说,这些细节很有价值;对运维或一线支持来说,更想要的是一种可搜索、可筛选、可长期追踪的记录方式:按对象、按运行批次、按严重级别快速定位问题,并能把一…

作者头像 李华