From 62e4af401601e0b86a78c2881df849e1bfdb1c77 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 25 Nov 2025 19:50:43 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E3=80=90system=E3=80=91=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=A2=AB=E7=A6=81=E7=94=A8=E6=97=B6=EF=BC=8C=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=85=B6=E7=9B=B8=E5=85=B3=20token=EF=BC=8C=E5=85=B3?= =?UTF-8?q?=E8=81=94=20issue=EF=BC=9Ahttps://gitee.com/yudaocode/yudao-ui-?= =?UTF-8?q?admin-vue3/issues/IB2EK6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dal/mysql/oauth2/OAuth2AccessTokenMapper.java | 5 +++++ .../system/service/oauth2/OAuth2TokenService.java | 11 +++++++++++ .../service/oauth2/OAuth2TokenServiceImpl.java | 15 +++++++++++++++ .../system/service/user/AdminUserServiceImpl.java | 10 ++++++++++ 4 files changed, 41 insertions(+) diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/oauth2/OAuth2AccessTokenMapper.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/oauth2/OAuth2AccessTokenMapper.java index 81ca13fad7..d4a6ce6d67 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/oauth2/OAuth2AccessTokenMapper.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/oauth2/OAuth2AccessTokenMapper.java @@ -32,4 +32,9 @@ public interface OAuth2AccessTokenMapper extends BaseMapperX selectListByUserIdAndUserType(Long userId, Integer userType) { + return selectList(OAuth2AccessTokenDO::getUserId, userId, + OAuth2AccessTokenDO::getUserType, userType); + } + } diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenService.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenService.java index 977d935397..915a9fa2d3 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenService.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenService.java @@ -69,6 +69,17 @@ public interface OAuth2TokenService { */ OAuth2AccessTokenDO removeAccessToken(String accessToken); + /** + * 移除访问令牌 + * 注意:该流程中,会移除相关的刷新令牌 + * + * 参考 DefaultTokenServices 的 revokeToken 方法 + * + * @param userId 用户编号 + * @param userType 用户类型 + */ + void removeAccessToken(Long userId, Integer userType); + /** * 获得访问令牌分页 * diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java index 5c628b8e1e..5342cbdb98 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java @@ -153,6 +153,21 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService { return accessTokenDO; } + @Override + public void removeAccessToken(Long userId, Integer userType) { + List accessTokens = oauth2AccessTokenMapper.selectListByUserIdAndUserType(userId, userType); + if (CollUtil.isEmpty(accessTokens)) { + return; + } + accessTokens.forEach(accessToken -> { + // 删除访问令牌 + oauth2AccessTokenMapper.deleteById(accessToken.getId()); + oauth2AccessTokenRedisDAO.delete(accessToken.getAccessToken()); + // 删除刷新令牌 + oauth2RefreshTokenMapper.deleteByRefreshToken(accessToken.getRefreshToken()); + }); + } + @Override public PageResult getAccessTokenPage(OAuth2AccessTokenPageReqVO reqVO) { return oauth2AccessTokenMapper.selectPage(reqVO); diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index d84ddd85d6..59052ea8db 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; @@ -26,6 +27,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper; import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper; import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.dept.PostService; +import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.tenant.TenantService; import com.google.common.annotations.VisibleForTesting; @@ -75,6 +77,9 @@ public class AdminUserServiceImpl implements AdminUserService { @Resource @Lazy // 延迟,避免循环依赖报错 private TenantService tenantService; + @Resource + @Lazy // 懒加载,避免循环依赖 + private OAuth2TokenService oauth2TokenService; @Resource private UserPostMapper userPostMapper; @@ -227,6 +232,11 @@ public class AdminUserServiceImpl implements AdminUserService { updateObj.setId(id); updateObj.setStatus(status); userMapper.updateById(updateObj); + + // 如果是禁用用户,则删除其 Token 信息 + if (CommonStatusEnum.isDisable(status)) { + oauth2TokenService.removeAccessToken(id, UserTypeEnum.ADMIN.getValue()); + } } @Override