用途:在 Spring Boot 项目中实现多租户(multi-tenancy),核心原则是把租户身份视为授权边界,而不是查询便利。需先选择隔离模型:每租户独立数据库(隔离最强、运维成本最高)、每租户独立 schema(强逻辑隔离、共享基础设施)、共享 schema + tenant_id(运维最简单,但每条访问路径都必须强制作用域)。选定模型后应记录并禁止仓储绕过该模型。
租户解析:从已验证的令牌声明、可信主机映射或已认证 API key 推导租户;拒绝缺失、未知、已禁用或冲突的租户标识;不要单独信任公开的 X-Tenant-Id 请求头。Servlet 线程本地上下文要在 finally 中清理,响应式流用 Reactor Context。
隔离强制:在打开持久化会话或事务之前完成租户选择;将租户身份纳入唯一约束、缓存键、幂等键和对象存储路径;阻止跨租户 join 与不受限的管理仓储;支持代操作需显式授权并审计每次使用。
运维:按数据库/schema 分别执行迁移,支持可恢复进度与版本报告;将租户身份显式传播到定时任务、消息和异步任务;用配额和有界标识符限制吵闹租户并做按租户可观测性;测试应覆盖跨租户访问的负向用例,而不只是成功查询。
资料提到示例文件 examples/good-tenant-filter.java 与 examples/bad-tenant-filter.java,但未提供具体代码内容。常见陷阱包括:信任调用方提供的租户头、忘记清理 Servlet ThreadLocal 导致线程池串租户、只对数据库查询做作用域而遗漏缓存键、在选租户之前开启事务、后台任务缺少租户上下文(应把租户作为显式任务参数)。其它细节暂未提供。