Class TenantFilterSupport

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

public final class TenantFilterSupport extends Object

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 Details

  • Method Details

    • enableFilter

      public static boolean enableFilter(jakarta.persistence.EntityManager entityManager, String tenantId)

      啟用租戶 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)
      啟用租戶 filter
      Parameters:
      entityManager - JPA EntityManager
      tenantId - 當前租戶 ID
      filterName - filter 名稱
      parameterName - 參數名稱
      Returns:
      true 如果成功啟用,false 如果 filter 已啟用或發生錯誤
    • disableFilter

      public static boolean disableFilter(jakarta.persistence.EntityManager entityManager)

      停用租戶 filter

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

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

      public static boolean disableFilter(jakarta.persistence.EntityManager entityManager, String filterName)
      停用租戶 filter
      Parameters:
      entityManager - JPA EntityManager
      filterName - filter 名稱
      Returns:
      true 如果成功停用,false 如果 filter 未啟用或發生錯誤
    • isFilterEnabled

      public static boolean isFilterEnabled(jakarta.persistence.EntityManager entityManager)
      檢查租戶 filter 是否已啟用
      Parameters:
      entityManager - JPA EntityManager
      Returns:
      true 如果 filter 已啟用
    • isFilterEnabled

      public static boolean isFilterEnabled(jakarta.persistence.EntityManager entityManager, String filterName)
      檢查租戶 filter 是否已啟用
      Parameters:
      entityManager - JPA EntityManager
      filterName - filter 名稱
      Returns:
      true 如果 filter 已啟用