Class CompositeTenantIdResolver

java.lang.Object
io.leandev.appfuse.security.tenant.resolver.CompositeTenantIdResolver
All Implemented Interfaces:
TenantIdResolver

public class CompositeTenantIdResolver extends Object implements TenantIdResolver

組合多個 TenantIdResolver 的複合解析器

依序嘗試每個 resolver,直到其中一個返回非 null 的租戶 ID——讓同一部署可同時支援 多種認證方式(bearer token 與 Basic Auth 的租戶各在不同位置)。

使用範例:

// 預設鏈(涵蓋 bearer + Basic Auth 兩條認證路徑)
TenantIdResolver resolver = CompositeTenantIdResolver.withDefaults();

// 自組(如 IdP 的 claim 名不是 tenantId,或要加自訂認證方式)
TenantIdResolver resolver = new CompositeTenantIdResolver(
    new JwtClaimTenantIdResolver("tenant_id"),
    new UserDetailsTenantIdResolver()
);
  • Constructor Details

    • CompositeTenantIdResolver

      public CompositeTenantIdResolver(TenantIdResolver... resolvers)
      建構組合 resolver
      Parameters:
      resolvers - 要組合的 resolver 列表,依序嘗試
    • CompositeTenantIdResolver

      public CompositeTenantIdResolver(List<TenantIdResolver> resolvers)
      建構組合 resolver
      Parameters:
      resolvers - 要組合的 resolver 列表,依序嘗試
  • Method Details

    • resolve

      public String resolve(org.springframework.security.core.Authentication authentication)
      Description copied from interface: TenantIdResolver
      從認證資訊中解析租戶 ID
      Specified by:
      resolve in interface TenantIdResolver
      Parameters:
      authentication - Spring Security 認證物件,不為 null
      Returns:
      租戶 ID,若此 resolver 無法處理則返回 null
    • withDefaults

      public static CompositeTenantIdResolver withDefaults()

      建立包含預設 resolver 的組合

      預設順序對應兩條實際存在的認證路徑:

      Returns:
      預設配置的組合 resolver
    • withDefaults

      public static CompositeTenantIdResolver withDefaults(String claimName)
      建立包含預設 resolver 的組合,使用指定的 claim 名稱
      Parameters:
      claimName - JWT 中的租戶 ID claim 名稱(IdP 慣例不同時使用)
      Returns:
      使用指定 claim 名稱的組合 resolver