From 050d4c6c2ef211db26264a582613a0f560cb6ad7 Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Fri, 14 Jun 2024 10:41:37 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E6=B7=BB=E5=8A=A0=E7=A7=9F=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tenant/aspect/TenantFilterAspect.java | 3 + .../tenant/core/aop/TenantIgnoreAspect.java | 0 .../common/tenant/helper/TenantHelper.java | 68 +++++++++++++++++++ .../tenant/listener/TenantListener.java | 3 + 4 files changed, 74 insertions(+) create mode 100644 iot-common-tenant/src/main/java/cc/iotkit/common/tenant/core/aop/TenantIgnoreAspect.java diff --git a/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/aspect/TenantFilterAspect.java b/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/aspect/TenantFilterAspect.java index 21c4d03..2854be7 100755 --- a/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/aspect/TenantFilterAspect.java +++ b/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/aspect/TenantFilterAspect.java @@ -49,6 +49,9 @@ public class TenantFilterAspect { @AfterReturning(pointcut = "openSession()", returning = "session") public void afterOpenSession(Object session) { + if(TenantHelper.isIgnore()){ + return; + } if (session instanceof Session) { Long tenantId = LoginHelper.getTenantId(); Long dynamic = TenantHelper.getDynamic(); diff --git a/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/core/aop/TenantIgnoreAspect.java b/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/core/aop/TenantIgnoreAspect.java new file mode 100644 index 0000000..e69de29 diff --git a/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/helper/TenantHelper.java b/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/helper/TenantHelper.java index 67f1f5b..4957fc0 100755 --- a/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/helper/TenantHelper.java +++ b/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/helper/TenantHelper.java @@ -37,6 +37,7 @@ import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import java.util.Objects; +import java.util.function.Supplier; /** * 租户助手 @@ -51,6 +52,10 @@ public class TenantHelper { private static final ThreadLocal TEMP_DYNAMIC_TENANT = new TransmittableThreadLocal<>(); + /** + * 是否忽略租户 + */ + private static final ThreadLocal IGNORE = new TransmittableThreadLocal<>(); /** * 租户功能是否启用 */ @@ -117,4 +122,67 @@ public class TenantHelper { return tenantId; } + public static void setIgnore(Boolean ignore) { + IGNORE.set(ignore); + } + + + /** + * 开启忽略租户(开启后需手动调用 {@link #disableIgnore()} 关闭) + */ + public static void enableIgnore() { + IGNORE.set(Boolean.TRUE); + } + + /** + * 关闭忽略租户 + */ + public static void disableIgnore() { + IGNORE.remove(); + } + + /** + * 在忽略租户中执行 + * + * @param handle 处理执行方法 + */ + public static void ignore(Runnable handle) { + enableIgnore(); + try { + handle.run(); + } finally { + disableIgnore(); + } + } + + /** + * 在忽略租户中执行 + * + * @param handle 处理执行方法 + */ + public static T ignore(Supplier handle) { + enableIgnore(); + try { + return handle.get(); + } finally { + disableIgnore(); + } + } + + /** + * 当前是否忽略租户 + * + * @return 是否忽略 + */ + public static boolean isIgnore() { + Boolean aBoolean = IGNORE.get(); + return Boolean.TRUE.equals(aBoolean); + } + + + public static void clear() { + TEMP_DYNAMIC_TENANT.remove(); + IGNORE.remove(); + } + } diff --git a/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/listener/TenantListener.java b/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/listener/TenantListener.java index adda6a7..00084ac 100755 --- a/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/listener/TenantListener.java +++ b/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/listener/TenantListener.java @@ -49,6 +49,9 @@ public class TenantListener { @PreRemove @PrePersist public void setTenant(TenantAware entity) { + if(TenantHelper.isIgnore()){ + return; + } Long tenantId = LoginHelper.getTenantId(); Long dynamic = TenantHelper.getDynamic(); if (!Objects.isNull(dynamic)) {