feat:【system】用户被禁用时,删除其相关 token,关联 issue:https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues/IB2EK6

This commit is contained in:
YunaiV 2025-11-25 19:50:43 +08:00
parent 351ae4494c
commit 62e4af4016
4 changed files with 41 additions and 0 deletions

View File

@ -32,4 +32,9 @@ public interface OAuth2AccessTokenMapper extends BaseMapperX<OAuth2AccessTokenDO
.orderByDesc(OAuth2AccessTokenDO::getId)); .orderByDesc(OAuth2AccessTokenDO::getId));
} }
default List<OAuth2AccessTokenDO> selectListByUserIdAndUserType(Long userId, Integer userType) {
return selectList(OAuth2AccessTokenDO::getUserId, userId,
OAuth2AccessTokenDO::getUserType, userType);
}
} }

View File

@ -69,6 +69,17 @@ public interface OAuth2TokenService {
*/ */
OAuth2AccessTokenDO removeAccessToken(String accessToken); OAuth2AccessTokenDO removeAccessToken(String accessToken);
/**
* 移除访问令牌
* 注意该流程中会移除相关的刷新令牌
*
* 参考 DefaultTokenServices revokeToken 方法
*
* @param userId 用户编号
* @param userType 用户类型
*/
void removeAccessToken(Long userId, Integer userType);
/** /**
* 获得访问令牌分页 * 获得访问令牌分页
* *

View File

@ -153,6 +153,21 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
return accessTokenDO; return accessTokenDO;
} }
@Override
public void removeAccessToken(Long userId, Integer userType) {
List<OAuth2AccessTokenDO> 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 @Override
public PageResult<OAuth2AccessTokenDO> getAccessTokenPage(OAuth2AccessTokenPageReqVO reqVO) { public PageResult<OAuth2AccessTokenDO> getAccessTokenPage(OAuth2AccessTokenPageReqVO reqVO) {
return oauth2AccessTokenMapper.selectPage(reqVO); return oauth2AccessTokenMapper.selectPage(reqVO);

View File

@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 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.exception.ServiceException;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 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.dal.mysql.user.AdminUserMapper;
import cn.iocoder.yudao.module.system.service.dept.DeptService; 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.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.permission.PermissionService;
import cn.iocoder.yudao.module.system.service.tenant.TenantService; import cn.iocoder.yudao.module.system.service.tenant.TenantService;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
@ -75,6 +77,9 @@ public class AdminUserServiceImpl implements AdminUserService {
@Resource @Resource
@Lazy // 延迟避免循环依赖报错 @Lazy // 延迟避免循环依赖报错
private TenantService tenantService; private TenantService tenantService;
@Resource
@Lazy // 懒加载避免循环依赖
private OAuth2TokenService oauth2TokenService;
@Resource @Resource
private UserPostMapper userPostMapper; private UserPostMapper userPostMapper;
@ -227,6 +232,11 @@ public class AdminUserServiceImpl implements AdminUserService {
updateObj.setId(id); updateObj.setId(id);
updateObj.setStatus(status); updateObj.setStatus(status);
userMapper.updateById(updateObj); userMapper.updateById(updateObj);
// 如果是禁用用户则删除其 Token 信息
if (CommonStatusEnum.isDisable(status)) {
oauth2TokenService.removeAccessToken(id, UserTypeEnum.ADMIN.getValue());
}
} }
@Override @Override