请检查 Java ThreadLocal 上下文传递及租户隔离。根据提供的项目资料给出具体结论、处理方案和验证方法。
适用范围:使用ThreadLocal、请求上下文或线程池的Java项目;仅在项目实际存在租户模型时检查租户,不能凭空增加业务隔离维度。
输入资料:、、、、、。
资料不足时,先列出最多3个影响结论的关键问题;可以继续的部分标明假设,无法确定的内容写“待核实”。不得编造文件、行号、调用链、性能数据或已完成的验证。
在线程复用场景中,检查自定义 ThreadLocal 是否在使用结束后清理。
检查步骤:
1. 列出所有上下文字段的写入来源、读取位置和清理位置,标注由认证结果生成还是直接来自请求参数;明确客户端传入标识不能自行证明其访问权限。
2. 沿一次请求追踪正常、异常、提前返回和重复分发路径,检查每条路径结束时上下文状态;给出可能残留的位置和下一次请求受影响的具体业务操作。
3. 追踪异步提交、定时执行和回调,确认上下文是否需要传递、传递哪些最小字段、何时冻结取值;不能假定父线程数据自动正确到达工作线程。
4. 核对嵌套调用临时切换上下文后的恢复策略,以及工作线程原有值如何处理;提出显式传参或受控包装方案时说明兼容影响和清理责任。
5. 在相同线程连续处理两个不同用户或租户的任务,第二个任务分别设置有效、缺失和错误上下文,验证数据访问范围;异常完成后再执行同样序列。
6. 把定位结果追踪到数据库查询和缓存键,验证实际数据边界而非只观察日志;如果权限依据缺失,应报告无法判定,不声称通过隔离检查。
输出要求:交付上下文生命周期表、越界场景、最小修复及隔离验证结果。风险表应写明残留字段、复用入口、可能访问的数据和证据,测试使用匿名样本并避免记录真实身份凭证。 只报告有证据支持的问题;区分“已验证”“推测”和“待验证”,涉及变更时给出受影响文件或对象、最小修改和复核方法。代码与操作示例使用占位符,不写入真实密码。
来源(核验日期:2026-09-08):
[阿里巴巴《P3C-PMD 官方公开规则》](https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md)
整理范围:仅依据上述公开文档的相关建议,业务场景、变量、检查流程与验收格式均为独立改写,不代表相关企业完整内部规范。