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

spring中RequestContextHolder

1、在 Spring 框架中,

RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); 

是获取当前请求上下文的核心方法。以下是其关键要点及注意事项:


一、核心机制

  1. 作用原理
    通过 ThreadLocal 存储当前线程的请求属性对象 RequestAttributes,支持在控制器、服务层等位置直接访问请求参数、头信息或会话。
    转换为 ServletRequestAttributes 后可获取 HttpServletRequest 对象:
  RequestAttributes attributes = RequestContextHolder.getRequestAttributes();if (attributes instanceof ServletRequestAttributes) {HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();// 可进一步操作 request 对象
}


二、适用场景

  • Web 请求处理
    适用于控制器(Controller)、服务层(Service)、过滤器(Filter)、拦截器(Interceptor)等与当前 HTTP 请求强关联的场景。
    典型用途:提取请求头中的租户标识、鉴权 Token 等公共参数。

三、多线程处理要点

  1. 子线程继承问题

    • 默认无法获取父线程上下文,需手动传递并设置 inheritable=true 
      // 父线程中设置可继承模式
      ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
      // 主线程设置
      RequestContextHolder.setRequestAttributes(sra , true); // 子线程获取
      RequestAttributes subAttributes = RequestContextHolder.getRequestAttributes();

    • 若主线程过早结束(如异步任务未等待),子线程可能因上下文被清理而获取空值。
  2. 并行流风险
    并行流(parallelStream)内部使用线程池,需提前显式绑定请求上下文,否则抛出空指针异常。

 


‌四、最佳实践

  1. 避免滥用
    优先通过方法参数传递 HttpServletRequest,而非全局依赖 RequestContextHolder,以提高代码可测试性。

  2. 异步任务处理
    提交异步任务前显式传递上下文,并确保主线程等待子线程完成(如使用 CompletableFuture

     // 示例:线程池任务传递上下文executor.submit(() -> {RequestContextHolder.setRequestAttributes(attributes); // 执行任务 
    });


通过合理使用并结合线程上下文管理,可高效实现跨层请求参数传递,同时规避多线程环境下的陷阱。

相关文章:

  • 【WEB3】区块链、隐私计算、AI和Web3.0——隐私计算(2)
  • AI赋能高频PCB信号完整性优化
  • Ubuntu上安装MySQL 8并配置Navicat远程连接
  • Redis如何实现分布式锁
  • CFCA受邀参加盛京银行手机银行7.0发布会
  • crontab
  • 5月8日星期四今日早报简报微语报早读
  • 红外遥控与NEC编码协议详解
  • C#学习7_面向对象:类、方法、修饰符
  • 【AI】DeepWiki 页面转换成 Markdown 保存 - Chrome 扩展
  • 【速通RAG实战:索引】5.RAG分块策略与Embedding技术
  • React -> AI组件 -> 调用Ollama模型, qwen3:1.7B非常聪明
  • 基础算法系列——树的入门
  • Linux_进程退出与进程等待
  • (14)Element Plus项目综合案例
  • 在Hugging Face网站像Github一样克隆repository到本地的具体步骤
  • bootstrap入门
  • 从代码学习深度学习 - 单发多框检测(SSD)PyTorch版
  • nputop:交互式 Ascend NPU 进程查看器(nvitop昇腾版)
  • 谷云科技iPaaS技术实践:集成平台如何解决库存不准等问题
  • 聆听百年唐调正声:唐文治王蘧常吟诵传习的背后
  • 2025世界数字教育大会将于5月14日至16日在武汉举办
  • 阿森纳被打得毫无脾气,回天无力的阿尔特塔只剩嘴硬
  • 首批18位!苏联籍抗日航空英烈信息更新
  • 是否有中国公民受印巴冲突影响?外交部:建议中国公民避免前往冲突涉及地点
  • 吴清:巴菲特即将退休,但价值投资、长期投资、理性投资、努力回报投资者等理念不会退休