liujie
2026-08-11 323764c813a09cd56cdab780155ef659dbe0b364
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
@@ -94,6 +94,7 @@
                String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
                String userKey = getTokenKey(uuid);
                LoginUser user = redisCache.getCacheObject(userKey);
                restoreMiddlePlatformToken(user, uuid);
                return user;
            }
            catch (Exception e)
@@ -151,6 +152,7 @@
        {
            String userKey = getTokenKey(token);
            redisCache.deleteObject(userKey);
            redisCache.deleteObject(getMiddlePlatformTokenKey(token));
        }
    }
@@ -240,6 +242,7 @@
        // 根据uuid将loginUser缓存
        String userKey = getTokenKey(loginUser.getToken());
        redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
        cacheMiddlePlatformToken(loginUser);
    }
    /**
     * 刷新令牌有效期
@@ -357,4 +360,34 @@
    {
        return CacheConstants.LOGIN_TOKEN_KEY + uuid;
    }
    /**
     * 目的:中台 Token 独立存储,避免因 LoginUser 的对外 JSON 脱敏规则而丢失认证信息。
     */
    private void cacheMiddlePlatformToken(LoginUser loginUser)
    {
        if (StringUtils.isNotEmpty(loginUser.getMiddlePlatformToken()))
        {
            redisCache.setCacheObject(getMiddlePlatformTokenKey(loginUser.getToken()),
                    loginUser.getMiddlePlatformToken(), expireTime, TimeUnit.MINUTES);
        }
    }
    /**
     * 目的:从独立 Redis 键恢复中台 Token,供后续所有中台业务请求添加 Bearer 认证头。
     */
    private void restoreMiddlePlatformToken(LoginUser loginUser, String uuid)
    {
        if (loginUser == null || StringUtils.isEmpty(uuid))
        {
            return;
        }
        String middlePlatformToken = redisCache.getCacheObject(getMiddlePlatformTokenKey(uuid));
        loginUser.setMiddlePlatformToken(middlePlatformToken);
    }
    private String getMiddlePlatformTokenKey(String uuid)
    {
        return CacheConstants.MIDDLE_PLATFORM_TOKEN_KEY + uuid;
    }
}