当前位置: 首页 > 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.gsyq.cn/news/181815.html

相关文章:

  • 算法题 链表的中间结点
  • 使用Miniconda-Python3.9同时运行不同版本PyTorch项目
  • CUDA occupancy calculator:Miniconda-Python3.9计算最优block大小
  • 发稿渠道哪家公司效果更可靠?2025年终7家服务商横向评测及最终推荐! - 十大品牌推荐
  • 贪心算法专题(十一):一箭双雕的快乐——「用最少数量的箭引爆气球」
  • 一次拿下 Web Dynpro ABAP 运行时全景:用 IF_WD_APPLICATION 把应用信息、启动环境、客户端能力都摸清
  • 企业宣传软文公司哪家效果靠谱?2025年终7家服务商权威测评与最终推荐! - 十大品牌推荐
  • 把后台 Spool 里的错误变成可检索的 Application Log:SAP ABAP 应用日志从配置到封装的实战指南
  • PyTorch模型训练慢?先确认Miniconda环境中的CUDA是否正常
  • 网易发稿哪家公司效果更靠谱?2025年终7家服务商权威评测与最终推荐! - 十大品牌推荐
  • 读懂 SAP Shared Memory 与 IMODE:从 ST02 的 Mode List 还原一次用户会话的内存旅程
  • 工业数字化平台助力构建全链路设备管理系统
  • K8S中storageClass
  • 在Arm架构的ubuntu中,使用qt qmediaplayer播放视频报错Warning: “No decoder available for type ‘video/mpeg...
  • Anaconda prompt启动慢:Miniconda-Python3.9无GUI更快响应
  • Markdown PlantUML类图生成:Miniconda-Python3.9绘制架构图
  • Miniconda-Python3.9 + PyTorch:最适合论文复现的技术组合
  • Pyenv versions查看已安装:Miniconda-Python3.9列出可用版本
  • python基于Vue的远程就医专家挂号预约系统 _4b2uo_django Flask pycharm项目
  • 2025-2026年这家环境监测与水质分析设备厂家实力“出圈” - 品牌推荐大师1
  • PyTorch安装分布式RPC:Miniconda-Python3.9支持跨节点通信
  • 2026最新实验台、通风柜、实验室装修、实验室规划设计厂家推荐:迅领实验室引领行业新标准 - 深度智识库
  • 2026游泳馆等美团自助核销接口教程,赶紧收藏起来
  • 衣物隐喻下的生命缝合:目前最先进的哲学理论《升命学说》,论“唯悟”作为世界的针线
  • 使用MATLAB的k-Wave工具箱进行超声CT成像
  • 游泳馆支持美团核销接口,小程序一键接入
  • 使用Miniconda管理多个PyTorch版本的正确姿势
  • 将Jupyter Notebook嵌入Miniconda-Python3.9环境的最佳实践
  • MBA必看!9个降AI率工具高效避坑指南
  • Docker Load加载镜像:Miniconda-Python3.9导入本地tar文件