update 优化 切换动态租户 默认线程内切换(如需全局 手动传参)

2.X
疯狂的狮子Li 9 months ago
parent 4dddeef59c
commit d7ee4f589c

@ -1,6 +1,5 @@
package org.dromara.common.tenant.helper; package org.dromara.common.tenant.helper;
import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import com.alibaba.ttl.TransmittableThreadLocal; import com.alibaba.ttl.TransmittableThreadLocal;
@ -79,22 +78,28 @@ public class TenantHelper {
} }
} }
public static void setDynamic(String tenantId) {
setDynamic(tenantId, false);
}
/** /**
* ( ) * ( )
* <p> * <p>
* 线 * 线
*
* @param tenantId id
* @param global
*/ */
public static void setDynamic(String tenantId) { public static void setDynamic(String tenantId, boolean global) {
if (!isEnable()) { if (!isEnable()) {
return; return;
} }
if (!isLogin()) { if (!isLogin() || !global) {
TEMP_DYNAMIC_TENANT.set(tenantId); TEMP_DYNAMIC_TENANT.set(tenantId);
return; return;
} }
String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId(); String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId();
RedisUtils.setCacheObject(cacheKey, tenantId); RedisUtils.setCacheObject(cacheKey, tenantId);
SaHolder.getStorage().set(cacheKey, tenantId);
} }
/** /**
@ -109,13 +114,13 @@ public class TenantHelper {
if (!isLogin()) { if (!isLogin()) {
return TEMP_DYNAMIC_TENANT.get(); return TEMP_DYNAMIC_TENANT.get();
} }
String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId(); // 如果线程内有值 优先返回
String tenantId = (String) SaHolder.getStorage().get(cacheKey); String tenantId = TEMP_DYNAMIC_TENANT.get();
if (StringUtils.isNotBlank(tenantId)) { if (StringUtils.isNotBlank(tenantId)) {
return tenantId; return tenantId;
} }
String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId();
tenantId = RedisUtils.getCacheObject(cacheKey); tenantId = RedisUtils.getCacheObject(cacheKey);
SaHolder.getStorage().set(cacheKey, tenantId);
return tenantId; return tenantId;
} }
@ -130,9 +135,9 @@ public class TenantHelper {
TEMP_DYNAMIC_TENANT.remove(); TEMP_DYNAMIC_TENANT.remove();
return; return;
} }
TEMP_DYNAMIC_TENANT.remove();
String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId(); String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId();
RedisUtils.deleteObject(cacheKey); RedisUtils.deleteObject(cacheKey);
SaHolder.getStorage().delete(cacheKey);
} }
/** /**

@ -145,7 +145,7 @@ public class SysTenantController extends BaseController {
@SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
@GetMapping("/dynamic/{tenantId}") @GetMapping("/dynamic/{tenantId}")
public R<Void> dynamicTenant(@NotBlank(message = "租户ID不能为空") @PathVariable String tenantId) { public R<Void> dynamicTenant(@NotBlank(message = "租户ID不能为空") @PathVariable String tenantId) {
TenantHelper.setDynamic(tenantId); TenantHelper.setDynamic(tenantId, true);
return R.ok(); return R.ok();
} }

Loading…
Cancel
Save