标准答案

  1. 线程本地或协程本地上下文必须在请求结束时清理,线程池复用时尤其要避免残留。
  2. 异步任务应显式携带必要的租户、授权和追踪信息,不要隐式复制整个请求对象。
  3. 跨进程消息中的租户和用户字段仍需服务端重新授权,Trace Context 不能代替身份认证。
  4. 日志和指标要脱敏并验证跨租户访问、取消和重试路径。

题目解析

线程本地或协程本地上下文只是运行时的关联手段,线程池和异步回调复用执行单元时很容易残留。请求结束、取消和异常路径都要清理,不能把上下文生命周期交给 GC 猜测。

跨进程任务只应携带完成任务所需的最小身份和追踪字段,服务端在真正访问资源时重新鉴权。Trace Context 可以串联日志,但不能证明调用方拥有资源权限。

多租户系统要特别测试重试、延迟任务和批量任务:这些任务可能脱离原始请求执行,必须明确授权有效期、租户边界、日志脱敏和取消规则。

常见误区

  • 误区:把线程本地用户当作永久身份。改正:在线程池归还和请求结束时清理,并在资源访问处重新校验身份和权限。
  • 误区:把 access token 原样塞进消息。改正:只传最小必要身份或短期任务凭证,避免消息长期保存可重放的高权限 token。
  • 误区:任务重试沿用已经失效的授权上下文。改正:定义任务执行时的授权模型和有效期,过期后重新授权或转人工处理。

作者信息