Class TenantFilterSupport
java.lang.Object
io.leandev.appfuse.jpa.tenant.TenantFilterSupport
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 -
Method Summary
Modifier and TypeMethodDescriptionstatic booleandisableFilter(jakarta.persistence.EntityManager entityManager) 停用租戶 filterstatic booleandisableFilter(jakarta.persistence.EntityManager entityManager, String filterName) 停用租戶 filterstatic booleanenableFilter(jakarta.persistence.EntityManager entityManager, String tenantId) 啟用租戶 filterstatic booleanenableFilter(jakarta.persistence.EntityManager entityManager, String tenantId, String filterName, String parameterName) 啟用租戶 filterstatic booleanisFilterEnabled(jakarta.persistence.EntityManager entityManager) 檢查租戶 filter 是否已啟用static booleanisFilterEnabled(jakarta.persistence.EntityManager entityManager, String filterName) 檢查租戶 filter 是否已啟用
-
Field Details
-
DEFAULT_FILTER_NAME
-
DEFAULT_PARAMETER_NAME
-
-
Method Details
-
enableFilter
public static boolean enableFilter(jakarta.persistence.EntityManager entityManager, String tenantId) 啟用租戶 filter
使用預設的 filter 名稱 "tenantFilter" 和參數名稱 "tenantId"。
- Parameters:
entityManager- JPA EntityManagertenantId- 當前租戶 ID- Returns:
- true 如果成功啟用,false 如果 filter 已啟用或發生錯誤
-
enableFilter
public static boolean enableFilter(jakarta.persistence.EntityManager entityManager, String tenantId, String filterName, String parameterName) 啟用租戶 filter- Parameters:
entityManager- JPA EntityManagertenantId- 當前租戶 IDfilterName- 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 EntityManagerfilterName- 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 EntityManagerfilterName- filter 名稱- Returns:
- true 如果 filter 已啟用
-