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