TenantInterceptor 读 HTTP Header X-Tenant-Id401 { code: "TENANT_REQUIRED" }403 { code: "TENANT_NOT_FOUND" }TenantContext.set(profile);请求结束时 TenantContext.clear()(务必在 finally)@Async 线程池必须通过 TaskDecorator 复制 TenantContext 到子线程(参考现有 MdcTaskDecorator)CompletableFuture 手动切换线程时需显式 TenantContext.propagate(ctx, () -> ...)UtilToken key 格式统一为 {tenantId}:{vendor}:{appKey}mjava-pro 不得使用无 tenant 前缀的 UtilToken 接口SYSTEM 伪租户UtilHttp 审计日志在 mjava-baseline §3.5 字段基础上追加 tenantId./log/{日期}/pro-{tenantId}.log(按租户分片,方便定责)tenant.registry.formUuid)design.md 表格application-{profile}.yml 配置的 aliwork.appType / aliwork.systemToken(这是 mjava-pro 自身的入口凭据,非租户凭据)Map<String, TenantProfile>tenant.registry.ttlSeconds 可覆盖)POST /api/pro/_admin/reloadTenant(仅 dev profile)***)radioField_enabled=off → 注册表移除该 tenantId403 TENANT_DISABLED