From f03e6fe98fa395a4e27fc87192137ccff97818a3 Mon Sep 17 00:00:00 2001 From: slience-me Date: Tue, 15 Apr 2025 14:47:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=B7=E6=96=B0Token=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=8F=8D=E9=A6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联Issue9:https://github.com/haoxianrui/youlai-boot/issues/9 --- .../core/security/token/JwtTokenManager.java | 6 ++++++ .../security/token/RedisTokenManager.java | 21 +++++++++++++++++++ .../core/security/token/TokenManager.java | 8 +++++++ .../auth/service/impl/AuthServiceImpl.java | 2 +- 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/youlai/boot/core/security/token/JwtTokenManager.java b/src/main/java/com/youlai/boot/core/security/token/JwtTokenManager.java index fa331921..2f029eea 100644 --- a/src/main/java/com/youlai/boot/core/security/token/JwtTokenManager.java +++ b/src/main/java/com/youlai/boot/core/security/token/JwtTokenManager.java @@ -126,6 +126,12 @@ public class JwtTokenManager implements TokenManager { return isValid; } + @Override + public boolean validateRefreshToken(String refreshToken) { + // TODO 刷新令牌逻辑 + return false; + } + /** * 将令牌加入黑名单 * diff --git a/src/main/java/com/youlai/boot/core/security/token/RedisTokenManager.java b/src/main/java/com/youlai/boot/core/security/token/RedisTokenManager.java index 56efe7ea..dcb871f3 100644 --- a/src/main/java/com/youlai/boot/core/security/token/RedisTokenManager.java +++ b/src/main/java/com/youlai/boot/core/security/token/RedisTokenManager.java @@ -115,6 +115,17 @@ public class RedisTokenManager implements TokenManager { return redisTemplate.hasKey(formatTokenKey(token)); } + /** + * 校验 RefreshToken 是否有效 + * + * @param refreshToken 访问令牌 + * @return 是否有效 + */ + @Override + public boolean validateRefreshToken(String refreshToken) { + return redisTemplate.hasKey(formatRefreshTokenKey(refreshToken)); + } + /** * 刷新令牌 * @@ -255,6 +266,16 @@ public class RedisTokenManager implements TokenManager { return StrUtil.format(RedisConstants.Auth.ACCESS_TOKEN_USER, token); } + /** + * 格式化刷新令牌的 Redis 键 + * + * @param refreshToken 访问令牌 + * @return 格式化后的 Redis 键 + */ + private String formatRefreshTokenKey(String refreshToken) { + return StrUtil.format(RedisConstants.Auth.REFRESH_TOKEN_USER, refreshToken); + } + /** * 将值存储到 Redis * diff --git a/src/main/java/com/youlai/boot/core/security/token/TokenManager.java b/src/main/java/com/youlai/boot/core/security/token/TokenManager.java index e5ba39d0..bc722d2e 100644 --- a/src/main/java/com/youlai/boot/core/security/token/TokenManager.java +++ b/src/main/java/com/youlai/boot/core/security/token/TokenManager.java @@ -38,6 +38,14 @@ public interface TokenManager { */ boolean validateToken(String token); + /** + * 校验 刷新 Token 是否有效 + * + * @param refreshToken JWT Token + * @return 是否有效 + */ + boolean validateRefreshToken(String refreshToken); + /** * 刷新 Token * diff --git a/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java b/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java index 6bd2263e..d44b0c18 100644 --- a/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java +++ b/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java @@ -218,7 +218,7 @@ public class AuthServiceImpl implements AuthService { @Override public AuthenticationToken refreshToken(String refreshToken) { // 验证刷新令牌 - boolean isValidate = tokenManager.validateToken(refreshToken); + boolean isValidate = tokenManager.validateRefreshToken(refreshToken); if (!isValidate) { throw new BusinessException(ResultCode.REFRESH_TOKEN_INVALID);