Class TenantFilterSupport

java.lang.Object
io.leandev.appfuse.jpa.tenant.TenantFilterSupport

@Deprecated(since="4.0.0", forRemoval=true) public final class TenantFilterSupport extends Object
Deprecated, for removal: This API element is subject to removal in a future version.
自 4.0.0 起不再需要——租戶 filter 由 Hibernate 原生 discriminator 多租戶於 Session 建構時自動套用(見 TenantContextIdentifierResolverADR-016)。 本類別的手動 enable/disable 模式正是 ADR-016 所修正的缺陷根源:它要求有人在「Session 已綁定」的時機呼叫,實際只有 OSIV 綁定時成立,且失敗被自身 catch 吞掉。 跨租戶存取請改走 root session,而非關閉 filter。預計於 4.2.0 移除。

Hibernate 租戶 Filter 支援工具

提供啟用和停用 Hibernate Filter 的工具方法,用於實現多租戶數據隔離。

使用方式

在 AOP 或 Interceptor 中啟用 filter:

@Aspect
@Component
public class TenantFilterAspect {

    @PersistenceContext
    private EntityManager entityManager;

    @Before("@within(org.springframework.transaction.annotation.Transactional)")
    public void enableTenantFilter(JoinPoint joinPoint) {
        if (TenantContext.hasTenantContext()) {
            String tenantId = TenantContext.getCurrentTenantId();
            TenantFilterSupport.enableFilter(entityManager, tenantId);
        }
    }
}

手動停用 filter(管理員功能):

public List<Customer> findAllCustomersAcrossTenants() {
    TenantFilterSupport.disableFilter(entityManager);
    return customerRepository.findAll();
}
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final String
    Deprecated, for removal: This API element is subject to removal in a future version.
    預設的 filter 名稱
    static final String
    Deprecated, for removal: This API element is subject to removal in a future version.
    預設的參數名稱
  • Method Summary

    Modifier and Type
    Method
    Description
    static boolean
    disableFilter(jakarta.persistence.EntityManager entityManager)
    Deprecated, for removal: This API element is subject to removal in a future version.
    停用租戶 filter
    static boolean
    disableFilter(jakarta.persistence.EntityManager entityManager, String filterName)
    Deprecated, for removal: This API element is subject to removal in a future version.
    停用租戶 filter
    static boolean
    enableFilter(jakarta.persistence.EntityManager entityManager, String tenantId)
    Deprecated, for removal: This API element is subject to removal in a future version.
    啟用租戶 filter
    static boolean
    enableFilter(jakarta.persistence.EntityManager entityManager, String tenantId, String filterName, String parameterName)
    Deprecated, for removal: This API element is subject to removal in a future version.
    啟用租戶 filter
    static boolean
    isFilterEnabled(jakarta.persistence.EntityManager entityManager)
    Deprecated, for removal: This API element is subject to removal in a future version.
    檢查租戶 filter 是否已啟用
    static boolean
    isFilterEnabled(jakarta.persistence.EntityManager entityManager, String filterName)
    Deprecated, for removal: This API element is subject to removal in a future version.
    檢查租戶 filter 是否已啟用

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • DEFAULT_FILTER_NAME

      public static final String DEFAULT_FILTER_NAME
      Deprecated, for removal: This API element is subject to removal in a future version.
      預設的 filter 名稱
      See Also:
    • DEFAULT_PARAMETER_NAME

      public static final String DEFAULT_PARAMETER_NAME
      Deprecated, for removal: This API element is subject to removal in a future version.
      預設的參數名稱
      See Also:
  • Method Details

    • enableFilter

      public static boolean enableFilter(jakarta.persistence.EntityManager entityManager, String tenantId)
      Deprecated, for removal: This API element is subject to removal in a future version.

      啟用租戶 filter

      使用預設的 filter 名稱 "tenantFilter" 和參數名稱 "tenantId"。

      Parameters:
      entityManager - JPA EntityManager
      tenantId - 當前租戶 ID
      Returns:
      true 如果成功啟用,false 如果 filter 已啟用或發生錯誤
    • enableFilter

      public static boolean enableFilter(jakarta.persistence.EntityManager entityManager, String tenantId, String filterName, String parameterName)
      Deprecated, for removal: This API element is subject to removal in a future version.
      啟用租戶 filter
      Parameters:
      entityManager - JPA EntityManager
      tenantId - 當前租戶 ID
      filterName - filter 名稱
      parameterName - 參數名稱
      Returns:
      true 如果成功啟用,false 如果 filter 已啟用或發生錯誤
    • disableFilter

      public static boolean disableFilter(jakarta.persistence.EntityManager entityManager)
      Deprecated, for removal: This API element is subject to removal in a future version.

      停用租戶 filter

      使用預設的 filter 名稱 "tenantFilter"。

      Parameters:
      entityManager - JPA EntityManager
      Returns:
      true 如果成功停用,false 如果 filter 未啟用或發生錯誤
    • disableFilter

      public static boolean disableFilter(jakarta.persistence.EntityManager entityManager, String filterName)
      Deprecated, for removal: This API element is subject to removal in a future version.
      停用租戶 filter
      Parameters:
      entityManager - JPA EntityManager
      filterName - filter 名稱
      Returns:
      true 如果成功停用,false 如果 filter 未啟用或發生錯誤
    • isFilterEnabled

      public static boolean isFilterEnabled(jakarta.persistence.EntityManager entityManager)
      Deprecated, for removal: This API element is subject to removal in a future version.
      檢查租戶 filter 是否已啟用
      Parameters:
      entityManager - JPA EntityManager
      Returns:
      true 如果 filter 已啟用
    • isFilterEnabled

      public static boolean isFilterEnabled(jakarta.persistence.EntityManager entityManager, String filterName)
      Deprecated, for removal: This API element is subject to removal in a future version.
      檢查租戶 filter 是否已啟用
      Parameters:
      entityManager - JPA EntityManager
      filterName - filter 名稱
      Returns:
      true 如果 filter 已啟用