mjava-pro SHALL 在请求入口识别租户上下文。Controller 入口 MUST 通过 TenantInterceptor 读 HTTP Header X-Tenant-Id。
X-Tenant-Id401 { code: "TENANT_REQUIRED" }403 { code: "TENANT_NOT_FOUND" }TenantContext.set(profile) 写入 ThreadLocalTenantContext.clear()TenantContext MUST 在 @Async 线程池与 CompletableFuture 切换时正确传递,避免子线程拿不到租户凭据。
@Async 提交任务TenantContext.current() 返回发起请求的租户CompletableFuture.supplyAsync(executor, ...))TenantContext.propagate(ctx, runnable) 包装mjava-pro SHALL 使用带租户前缀的 UtilToken key,避免多租户间 token 互相覆盖。
{tenantId}:{vendor}:{appKey}SYSTEM 伪租户mjava-pro SHALL 在 mjava-baseline §3.5 字段基础上追加 tenantId,日志按租户分片。
./log/{日期}/pro-{tenantId}.logtenantId 字段