spec.md 1.8 KB

ADDED Requirements

Requirement: 注册源

租户配置 SHALL 存放于宜搭"应用表"。mjava-pro MUST 通过 tenant.registry.formUuid 配置项加载租户列表。

Scenario: 访问宜搭自身凭据

  • WHEN mjava-pro 启动加载租户表
  • THEN 使用 application-{profile}.yml 配置的 aliwork.appType / aliwork.systemToken(mjava-pro 自身入口凭据,不是租户凭据)
  • AND 租户凭据从宜搭表记录动态加载

Requirement: 加载与缓存

租户注册表 SHALL 支持启动全量加载 + TTL 刷新 + stale-while-revalidate。

Scenario: 启动全量加载

  • WHEN 应用启动 @PostConstruct
  • THEN 分页拉取全部 enabled=on 租户记录
  • AND 写入内存 Map<String, TenantProfile>

Scenario: TTL 过期刷新

  • WHEN 距上次加载超过 tenant.registry.ttlSeconds(默认 600 秒)
  • THEN 异步重新拉取
  • AND 旧值继续可用直到新值就绪

Scenario: 热刷入口

  • WHEN 调用 POST /api/pro/_admin/reloadTenant?tenantId=xxx
  • AND 当前 profile 为 dev
  • THEN 立即刷新单条记录

Requirement: 敏感字段处理

租户凭据(appSecret / systemToken)MUST 在日志输出时脱敏。内存中允许保留明文。

Scenario: 日志脱敏

  • WHEN 审计日志打印 TenantProfile
  • THEN appSecret / systemToken / accessKey 等字段输出为 ***
  • AND tenantId / vendor / corpId 等非敏感字段正常输出

Requirement: 失效与禁用

宜搭表 enabled=off 的租户 MUST 在下次刷新后移除。停用期间请求 MUST 返回 403。

Scenario: 禁用生效

  • WHEN 宜搭表单 radioField_enabled=off
  • AND 注册表刷新完成
  • THEN 该 tenantId 从内存 Map 移除
  • AND 携带此 tenantId 的请求返回 403 { code: "TENANT_DISABLED" }