liusuyi
2025-12-26 39602a902e2290c32aff44fc8b07b5d84e89ba96
ard-framework/src/main/java/com/ard/framework/web/service/TokenService.java
@@ -26,7 +26,7 @@
/**
 * token验证处理
 *
 * @author ruoyi
 * @author ard
 */
@Component
public class TokenService
@@ -44,6 +44,10 @@
    // 令牌有效期(默认30分钟)
    @Value("${token.expireTime}")
    private int expireTime;
    // 是否允许账户多终端同时登录(true允许 false不允许)
    @Value("${token.soloLogin}")
    private boolean soloLogin;
    protected static final long MILLIS_SECOND = 1000;
@@ -96,12 +100,17 @@
    /**
     * 删除用户身份信息
     */
    public void delLoginUser(String token)
    public void delLoginUser(String token, Long userId)
    {
        if (StringUtils.isNotEmpty(token))
        {
            String userKey = getTokenKey(token);
            redisCache.deleteObject(userKey);
        }
        if (!soloLogin && StringUtils.isNotNull(userId))
        {
            String userIdKey = getUserIdKey(userId);
            redisCache.deleteObject(userIdKey);
        }
    }
@@ -151,6 +160,12 @@
        // 根据uuid将loginUser缓存
        String userKey = getTokenKey(loginUser.getToken());
        redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
        if (!soloLogin)
        {
            // 缓存用户唯一标识,防止同一帐号,同时登录
            String userIdKey = getUserIdKey(loginUser.getUser().getUserId());
            redisCache.setCacheObject(userIdKey, userKey, expireTime, TimeUnit.MINUTES);
        }
    }
    /**
@@ -228,4 +243,17 @@
    {
        return CacheConstants.LOGIN_TOKEN_KEY + uuid;
    }
    private String getUserIdKey(Long userId)
    {
        return CacheConstants.LOGIN_USERID_KEY + userId;
    }
    public LoginUser getLoginUserByUserId(Long userId) {
        String userIdKey = getUserIdKey(userId);
        String tokenKey = redisCache.getCacheObject(userIdKey);
        if (tokenKey == null) return null;
        return redisCache.getCacheObject(tokenKey);
    }
}