update 优化 TenantHelper 动态租户支持函数式方法

2.X
疯狂的狮子Li 1 year ago
parent f6252a80cd
commit 5f660b27d3

@ -1,6 +1,7 @@
package org.dromara.common.tenant.helper;
import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.convert.Convert;
import com.alibaba.ttl.TransmittableThreadLocal;
import com.baomidou.mybatisplus.core.plugins.IgnoreStrategy;
@ -13,7 +14,6 @@ import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.springframework.web.context.request.RequestContextHolder;
import java.util.function.Supplier;
@ -82,10 +82,13 @@ public class TenantHelper {
/**
* ( )
* <p>
* web 线
* 线
*/
public static void setDynamic(String tenantId) {
if (!isWeb()) {
if (!isEnable()) {
return;
}
if (!isLogin()) {
TEMP_DYNAMIC_TENANT.set(tenantId);
return;
}
@ -97,10 +100,13 @@ public class TenantHelper {
/**
* ( )
* <p>
* web 线
* 线
*/
public static String getDynamic() {
if (!isWeb()) {
if (!isEnable()) {
return null;
}
if (!isLogin()) {
return TEMP_DYNAMIC_TENANT.get();
}
String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId();
@ -117,7 +123,10 @@ public class TenantHelper {
*
*/
public static void clearDynamic() {
if (!isWeb()) {
if (!isEnable()) {
return;
}
if (!isLogin()) {
TEMP_DYNAMIC_TENANT.remove();
return;
}
@ -126,6 +135,34 @@ public class TenantHelper {
SaHolder.getStorage().delete(cacheKey);
}
/**
*
*
* @param handle
*/
public static void dynamic(String tenantId, Runnable handle) {
setDynamic(tenantId);
try {
handle.run();
} finally {
clearDynamic();
}
}
/**
*
*
* @param handle
*/
public static <T> T dynamic(String tenantId, Supplier<T> handle) {
setDynamic(tenantId);
try {
return handle.get();
} finally {
clearDynamic();
}
}
/**
* id()
*/
@ -137,11 +174,13 @@ public class TenantHelper {
return tenantId;
}
/**
* web
*/
private static boolean isWeb() {
return RequestContextHolder.getRequestAttributes() != null;
private static boolean isLogin() {
try {
StpUtil.checkLogin();
return true;
} catch (Exception e) {
return false;
}
}
}

Loading…
Cancel
Save