mirror of
https://github.com/continew-org/continew-starter.git
synced 2025-09-08 16:57:09 +08:00
refactor(tenant): 优化租户忽略逻辑
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -35,7 +35,7 @@ public class TenantContext {
|
||||
/**
|
||||
* 隔离级别
|
||||
*/
|
||||
private TenantIsolationLevel isolationLevel;
|
||||
private TenantIsolationLevel isolationLevel = TenantIsolationLevel.LINE;
|
||||
|
||||
/**
|
||||
* 数据源信息
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user