diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/dto/KdocsTokenInfo.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/dto/KdocsTokenInfo.java index 5607501..545c55b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/dto/KdocsTokenInfo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/dto/KdocsTokenInfo.java @@ -23,9 +23,13 @@ public class KdocsTokenInfo implements Serializable { } public boolean isExpired() { - if (expiresIn == null || createTime == null) { + if (accessToken == null || accessToken.isEmpty()) { return true; } + // 部分 OAuth 响应不返回 expires_in;若按 null 判过期会导致前端误判「未授权」 + if (expiresIn == null || createTime == null) { + return false; + } long expireTime = createTime + (expiresIn * 1000L); return System.currentTimeMillis() >= (expireTime - 5 * 60 * 1000L); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/KdocsOAuthServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/KdocsOAuthServiceImpl.java index 3ca9555..d5cf4ae 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/KdocsOAuthServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/KdocsOAuthServiceImpl.java @@ -76,7 +76,14 @@ public class KdocsOAuthServiceImpl implements IKdocsOAuthService { KdocsTokenInfo info = new KdocsTokenInfo(); info.setAccessToken(data.getString("access_token")); info.setRefreshToken(data.getString("refresh_token")); - info.setExpiresIn(data.getInteger("expires_in")); + Integer exp = data.getInteger("expires_in"); + if (exp == null && data.get("expires_in") != null) { + try { + exp = Integer.parseInt(data.get("expires_in").toString()); + } catch (NumberFormatException ignored) { + } + } + info.setExpiresIn(exp != null ? exp : 7200); String openId = null; try { @@ -109,7 +116,14 @@ public class KdocsOAuthServiceImpl implements IKdocsOAuthService { KdocsTokenInfo info = new KdocsTokenInfo(); info.setAccessToken(data.getString("access_token")); info.setRefreshToken(data.getString("refresh_token")); - info.setExpiresIn(data.getInteger("expires_in")); + Integer exp = data.getInteger("expires_in"); + if (exp == null && data.get("expires_in") != null) { + try { + exp = Integer.parseInt(data.get("expires_in").toString()); + } catch (NumberFormatException ignored) { + } + } + info.setExpiresIn(exp != null ? exp : 7200); info.setUserId(existingUserId); return info; } @@ -117,6 +131,10 @@ public class KdocsOAuthServiceImpl implements IKdocsOAuthService { @Override public KdocsTokenInfo getCurrentToken() { try { + KdocsTokenInfo direct = redisCache.getCacheObject(TOKEN_KEY_PREFIX + "default_user"); + if (direct != null) { + return direct; + } String pattern = TOKEN_KEY_PREFIX + "*"; Collection keys = redisCache.keys(pattern); if (keys != null) {