From 35e79620e40d8d4f121a24ec720dcd8968ce9104 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Sun, 20 Jul 2025 08:37:09 +0800 Subject: [PATCH] =?UTF-8?q?refactor(tenant):=20=E4=BC=98=E5=8C=96=E7=A7=9F?= =?UTF-8?q?=E6=88=B7=E5=BF=BD=E7=95=A5=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tenant/aop/TenantIgnoreAspect.java | 5 ++- .../tenant/context/TenantContext.java | 2 +- .../tenant/interceptor/TenantInterceptor.java | 35 ++++++++++--------- .../extension/tenant/util/TenantUtils.java | 7 ++-- 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/aop/TenantIgnoreAspect.java b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/aop/TenantIgnoreAspect.java index 773c0648..616fb7d2 100644 --- a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/aop/TenantIgnoreAspect.java +++ b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/aop/TenantIgnoreAspect.java @@ -41,11 +41,14 @@ public class TenantIgnoreAspect { @Around("@annotation(tenantIgnore)") public Object around(ProceedingJoinPoint joinPoint, TenantIgnore tenantIgnore) throws Throwable { boolean oldIgnore = TenantContextHolder.isIgnore(); + if (oldIgnore) { + return joinPoint.proceed(); + } try { TenantContextHolder.setIgnore(true); return joinPoint.proceed(); } finally { - TenantContextHolder.setIgnore(oldIgnore); + TenantContextHolder.setIgnore(false); } } } diff --git a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/context/TenantContext.java b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/context/TenantContext.java index 1f05a067..8ea71ad3 100644 --- a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/context/TenantContext.java +++ b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/context/TenantContext.java @@ -35,7 +35,7 @@ public class TenantContext { /** * 隔离级别 */ - private TenantIsolationLevel isolationLevel; + private TenantIsolationLevel isolationLevel = TenantIsolationLevel.LINE; /** * 数据源信息 diff --git a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/interceptor/TenantInterceptor.java b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/interceptor/TenantInterceptor.java index 51377f75..6dc8f20f 100644 --- a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/interceptor/TenantInterceptor.java +++ b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/interceptor/TenantInterceptor.java @@ -19,7 +19,6 @@ package top.continew.starter.extension.tenant.interceptor; import cn.hutool.core.annotation.AnnotationUtil; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import org.springframework.core.Ordered; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import top.continew.starter.extension.tenant.annotation.TenantIgnore; @@ -33,7 +32,7 @@ import top.continew.starter.extension.tenant.context.TenantContextHolder; * @author Charles7c * @since 2.7.0 */ -public class TenantInterceptor implements HandlerInterceptor, Ordered { +public class TenantInterceptor implements HandlerInterceptor { private final TenantProperties tenantProperties; private final TenantProvider tenantProvider; @@ -45,21 +44,11 @@ public class TenantInterceptor implements HandlerInterceptor, Ordered { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - // 忽略租户拦截 - if (handler instanceof HandlerMethod handlerMethod) { - TenantIgnore methodAnnotation = handlerMethod.getMethodAnnotation(TenantIgnore.class); - if (methodAnnotation != null) { - return true; - } - TenantIgnore classAnnotation = AnnotationUtil.getAnnotation(handlerMethod - .getBeanType(), TenantIgnore.class); - if (classAnnotation != null) { - return true; - } - } // 设置上下文 String tenantId = request.getHeader(tenantProperties.getTenantIdHeader()); TenantContextHolder.setContext(tenantProvider.getByTenantId(tenantId, true)); + // 设置是否忽略租户 + TenantContextHolder.setIgnore(this.isIgnore(handler)); return true; } @@ -69,8 +58,20 @@ public class TenantInterceptor implements HandlerInterceptor, Ordered { TenantContextHolder.clear(); } - @Override - public int getOrder() { - return Integer.MIN_VALUE; + /** + * 是否忽略租户 + * + * @param handler 处理器 + * @return 是否忽略租户 + */ + private boolean isIgnore(Object handler) { + if (handler instanceof HandlerMethod handlerMethod) { + TenantIgnore methodAnnotation = handlerMethod.getMethodAnnotation(TenantIgnore.class); + if (methodAnnotation != null) { + return true; + } + return AnnotationUtil.getAnnotation(handlerMethod.getBeanType(), TenantIgnore.class) != null; + } + return false; } } \ No newline at end of file diff --git a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/util/TenantUtils.java b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/util/TenantUtils.java index dff1a186..eceaef6a 100644 --- a/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/util/TenantUtils.java +++ b/continew-starter-extension/continew-starter-extension-tenant/continew-starter-extension-tenant-core/src/main/java/top/continew/starter/extension/tenant/util/TenantUtils.java @@ -89,18 +89,17 @@ public class TenantUtils { * @param runnable 业务逻辑 */ public void executeIgnore(Runnable runnable) { - // 未启用租户,直接执行业务逻辑 - if (TenantContextHolder.isTenantDisabled()) { + // 未启用或忽略租户,直接执行业务逻辑 + if (TenantContextHolder.isTenantDisabled() || TenantContextHolder.isIgnore()) { runnable.run(); return; } - boolean oldIgnore = TenantContextHolder.isIgnore(); try { TenantContextHolder.setIgnore(true); // 执行业务逻辑 runnable.run(); } finally { - TenantContextHolder.setIgnore(oldIgnore); + TenantContextHolder.setIgnore(false); } } }