当前位置: 首页 > news >正文

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 原生,拦截器技术栈已全面进化。

http://www.jsqmd.com/news/166270/

相关文章:

  • 2026北京怀柔区离婚财产律所性价比排行榜:专业解决方案提供商推荐 - 苏木2025
  • 使用Miniconda-Python3.9同时运行不同版本PyTorch项目
  • 算法题 链表的中间结点
  • TeeChart .NET 2025.11.30
  • remi镜像
  • 贪心算法专题(九):左顾右盼太累,不如分头行动——「分发糖果」
  • 2026昌平继承律所口碑排名 专业继承律师推荐 在线法律问题咨询 全流程解决方案权威解析 胜诉率优先 - 苏木2025
  • Linux下Miniconda-Python3.9配置PyTorch全流程详解
  • CUDA occupancy calculator:Miniconda-Python3.9计算最优block大小
  • 贪心算法专题(十):维度权衡的艺术——「根据身高重建队列」
  • 发稿渠道哪家公司效果更可靠?2025年终7家服务商横向评测及最终推荐! - 十大品牌推荐
  • 贪心算法专题(十一):一箭双雕的快乐——「用最少数量的箭引爆气球」
  • 别再在 BAPI 后直接 COMMIT WORK:把 BAPI_TRANSACTION_COMMIT、COMMIT WORK 与 BAPI buffer 一次讲透
  • 一次拿下 Web Dynpro ABAP 运行时全景:用 IF_WD_APPLICATION 把应用信息、启动环境、客户端能力都摸清
  • Miniconda-Python3.9如何支持PyTorch与TensorRT集成
  • 把后台 Spool 里的错误变成可检索的 Application Log:SAP ABAP 应用日志从配置到封装的实战指南
  • 企业宣传软文公司哪家效果靠谱?2025年终7家服务商权威测评与最终推荐! - 十大品牌推荐
  • Miniconda-Python3.9如何支持PyTorch XLA进行TPU训练模拟
  • PyTorch模型训练慢?先确认Miniconda环境中的CUDA是否正常
  • 保健品软文哪家公司效果好?2025年终7家服务商权威评测及最终推荐! - 十大品牌推荐
  • 大模型微调不再难!伦哥保姆级教程,三步打造专属AI助手,小白也能轻松上手
  • 把 ST22 里的短 Dump 关进笼子:ABAP 程序避免崩溃的体系化手法(含 GUI_UPLOAD、Gateway、RAP 与 Tail Recursion 案例)
  • 网易发稿哪家公司效果更靠谱?2025年终7家服务商权威评测与最终推荐! - 十大品牌推荐
  • 301与302重定向终极指南:SEO场景下的正确选择与实践技巧
  • 数据结构专练(北京集训)
  • 工业数字化平台助力构建全链路设备管理系统
  • 读懂 SAP Shared Memory 与 IMODE:从 ST02 的 Mode List 还原一次用户会话的内存旅程
  • PyTorch模型服务化部署前的Miniconda-Python3.9环境校验
  • K8S中storageClass
  • 大模型开发全攻略:从零训练你的专属AI编程助手,小白也能秒变大神!