From 968ce96204bec90f6c71a41891b5b94cf2c1e370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=9D=E5=85=88=E7=91=9E?= <1490493387@qq.com> Date: Thu, 28 Sep 2023 23:58:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=94=A8=E6=88=B7=E6=B3=A8=E9=94=80?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/security/util/SecurityUtils.java | 5 ++++- .../com/youlai/system/config/SwaggerConfig.java | 5 +---- .../system/service/impl/SysUserServiceImpl.java | 16 ++++++++++++---- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/youlai-common/common-security/src/main/java/com/youlai/common/security/util/SecurityUtils.java b/youlai-common/common-security/src/main/java/com/youlai/common/security/util/SecurityUtils.java index 13d06013..77ccc957 100644 --- a/youlai-common/common-security/src/main/java/com/youlai/common/security/util/SecurityUtils.java +++ b/youlai-common/common-security/src/main/java/com/youlai/common/security/util/SecurityUtils.java @@ -59,12 +59,15 @@ public class SecurityUtils { return String.valueOf(getTokenAttributes().get("jti")); } + public static Long getExp() { + return Convert.toLong(getTokenAttributes().get("jti")); + } + public static Integer getDataScope() { return Convert.toInt(getTokenAttributes().get("dataScope")); } public static Long getMemberId() { - return Convert.toLong(getTokenAttributes().get("memberId")); } } diff --git a/youlai-system/system-boot/src/main/java/com/youlai/system/config/SwaggerConfig.java b/youlai-system/system-boot/src/main/java/com/youlai/system/config/SwaggerConfig.java index 2bc2b349..386e97d8 100644 --- a/youlai-system/system-boot/src/main/java/com/youlai/system/config/SwaggerConfig.java +++ b/youlai-system/system-boot/src/main/java/com/youlai/system/config/SwaggerConfig.java @@ -7,18 +7,15 @@ import io.swagger.v3.oas.models.info.License; import io.swagger.v3.oas.models.security.OAuthFlows; import io.swagger.v3.oas.models.security.Scopes; import io.swagger.v3.oas.models.security.SecurityScheme; -import org.springdoc.core.models.GroupedOpenApi; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * Swagger 配置 - *

- * Spring Doc FAQ: https://springdoc.org/#faq * * @author haoxr - * @since 2023/2/17 + * @since 3.0.0 */ @Configuration public class SwaggerConfig { diff --git a/youlai-system/system-boot/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java b/youlai-system/system-boot/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java index 5ed7ba9b..5bb54ff3 100644 --- a/youlai-system/system-boot/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java +++ b/youlai-system/system-boot/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java @@ -35,6 +35,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.List; import java.util.Set; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -265,11 +266,18 @@ public class SysUserServiceImpl extends ServiceImpl impl */ @Override public boolean logout() { + String jti = SecurityUtils.getJti(); + Long expireTime = SecurityUtils.getExp(); // token 过期时间戳(秒) - - return false; + long currentTime = System.currentTimeMillis() / 1000;// 当前时间(单位:秒) + if (expireTime != null) { + if (expireTime > currentTime) { // token未过期,添加至缓存作为黑名单限制访问,缓存时间为token过期剩余时间 + redisTemplate.opsForValue().set(SecurityConstants.BLACKLIST_TOKEN_PREFIX + jti, null, (expireTime - currentTime), TimeUnit.SECONDS); + } + } else { // token 永不过期则永久加入黑名单(一般不会有) + redisTemplate.opsForValue().set(SecurityConstants.BLACKLIST_TOKEN_PREFIX + jti, null); + } + return true; } - - } -- GitLab