Class TenantFilterSupport
java.lang.Object
io.leandev.appfuse.jpa.tenant.TenantFilterSupport
Deprecated, for removal: This API element is subject to removal in a future version.
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) Deprecated, for removal: This API element is subject to removal in a future version.停用租戶 filterstatic booleandisableFilter(jakarta.persistence.EntityManager entityManager, String filterName) Deprecated, for removal: This API element is subject to removal in a future version.停用租戶 filterstatic booleanenableFilter(jakarta.persistence.EntityManager entityManager, String tenantId) Deprecated, for removal: This API element is subject to removal in a future version.啟用租戶 filterstatic booleanenableFilter(jakarta.persistence.EntityManager entityManager, String tenantId, String filterName, String parameterName) Deprecated, for removal: This API element is subject to removal in a future version.啟用租戶 filterstatic booleanisFilterEnabled(jakarta.persistence.EntityManager entityManager) Deprecated, for removal: This API element is subject to removal in a future version.檢查租戶 filter 是否已啟用static booleanisFilterEnabled(jakarta.persistence.EntityManager entityManager, String filterName) Deprecated, for removal: This API element is subject to removal in a future version.檢查租戶 filter 是否已啟用
-
Field Details
-
DEFAULT_FILTER_NAME
Deprecated, for removal: This API element is subject to removal in a future version.預設的 filter 名稱- See Also:
-
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 EntityManagertenantId- 當前租戶 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 EntityManagertenantId- 當前租戶 IDfilterName- 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 EntityManagerfilterName- 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 EntityManagerfilterName- filter 名稱- Returns:
- true 如果 filter 已啟用
-
TenantContextIdentifierResolver與 ADR-016)。 本類別的手動 enable/disable 模式正是 ADR-016 所修正的缺陷根源:它要求有人在「Session 已綁定」的時機呼叫,實際只有 OSIV 綁定時成立,且失敗被自身 catch 吞掉。 跨租戶存取請改走 root session,而非關閉 filter。預計於 4.2.0 移除。