mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 08:13:44 +08:00 
			
		
		
		
	update 优化 切换动态租户 默认线程内切换(如需全局 手动传参)
This commit is contained in:
		@@ -1,6 +1,5 @@
 | 
			
		||||
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;
 | 
			
		||||
@@ -79,22 +78,28 @@ public class TenantHelper {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void setDynamic(String tenantId) {
 | 
			
		||||
        setDynamic(tenantId, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设置动态租户(一直有效 需要手动清理)
 | 
			
		||||
     * <p>
 | 
			
		||||
     * 如果为未登录状态下 那么只在当前线程内生效
 | 
			
		||||
     *
 | 
			
		||||
     * @param tenantId 租户id
 | 
			
		||||
     * @param global   是否全局生效
 | 
			
		||||
     */
 | 
			
		||||
    public static void setDynamic(String tenantId) {
 | 
			
		||||
    public static void setDynamic(String tenantId, boolean global) {
 | 
			
		||||
        if (!isEnable()) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (!isLogin()) {
 | 
			
		||||
        if (!isLogin() || !global) {
 | 
			
		||||
            TEMP_DYNAMIC_TENANT.set(tenantId);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId();
 | 
			
		||||
        RedisUtils.setCacheObject(cacheKey, tenantId);
 | 
			
		||||
        SaHolder.getStorage().set(cacheKey, tenantId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -109,13 +114,13 @@ public class TenantHelper {
 | 
			
		||||
        if (!isLogin()) {
 | 
			
		||||
            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)) {
 | 
			
		||||
            return tenantId;
 | 
			
		||||
        }
 | 
			
		||||
        String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId();
 | 
			
		||||
        tenantId = RedisUtils.getCacheObject(cacheKey);
 | 
			
		||||
        SaHolder.getStorage().set(cacheKey, tenantId);
 | 
			
		||||
        return tenantId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -130,9 +135,9 @@ public class TenantHelper {
 | 
			
		||||
            TEMP_DYNAMIC_TENANT.remove();
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        TEMP_DYNAMIC_TENANT.remove();
 | 
			
		||||
        String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId();
 | 
			
		||||
        RedisUtils.deleteObject(cacheKey);
 | 
			
		||||
        SaHolder.getStorage().delete(cacheKey);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -144,7 +144,7 @@ public class SysTenantController extends BaseController {
 | 
			
		||||
    @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
 | 
			
		||||
    @GetMapping("/dynamic/{tenantId}")
 | 
			
		||||
    public R<Void> dynamicTenant(@NotBlank(message = "租户ID不能为空") @PathVariable String tenantId) {
 | 
			
		||||
        TenantHelper.setDynamic(tenantId);
 | 
			
		||||
        TenantHelper.setDynamic(tenantId, true);
 | 
			
		||||
        return R.ok();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user