refactor(tenant): 优化租户忽略逻辑

This commit is contained in:
2025-07-20 08:37:09 +08:00
parent d8c4224030
commit 35e79620e4
4 changed files with 26 additions and 23 deletions

View File

@@ -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);
}
}
}

View File

@@ -35,7 +35,7 @@ public class TenantContext {
/**
* 隔离级别
*/
private TenantIsolationLevel isolationLevel;
private TenantIsolationLevel isolationLevel = TenantIsolationLevel.LINE;
/**
* 数据源信息

View File

@@ -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;
}
}

View File

@@ -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);
}
}
}