From 6c7282ff27cb0a611fae0d4e0ec5841244f367c4 Mon Sep 17 00:00:00 2001 From: preschooler Date: Tue, 5 May 2026 11:24:21 +0800 Subject: [PATCH] ✨ feat(system): 添加令牌清理定时任务 --- yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/oauth2/OAuth2AccessTokenMapper.java | 12 ++++++++++++ yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/oauth2/OAuth2RefreshTokenMapper.java | 13 +++++++++++++ yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/job/token/TokenCleanJob.java | 42 ++++++++++++++++++++++++++++++++++++++++++ yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenService.java | 15 +++++++++++++++ yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java | 31 +++++++++++++++++++++++++++++++ 5 files changed, 113 insertions(+), 0 deletions(-) create mode 100644 yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/job/token/TokenCleanJob.java 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 d4a6ce6..c3c346a 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 @@ -6,7 +6,9 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; import cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.token.OAuth2AccessTokenPageReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; +import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.time.LocalDateTime; import java.util.List; @@ -37,4 +39,14 @@ public interface OAuth2AccessTokenMapper extends BaseMapperX { @@ -19,4 +23,13 @@ public interface OAuth2RefreshTokenMapper extends BaseMapperX getAccessTokenPage(OAuth2AccessTokenPageReqVO reqVO); + /** + * 清理过期 exceedDay 天的刷新令牌 + * + * @param exceedDay 过期多少天就进行清理 + * @param deleteLimit 清理的间隔条数 + */ + Integer cleanRefreshToken(Integer exceedDay, Integer deleteLimit); + + /** + * 清理过期 exceedDay 天的访问令牌 + * + * @param exceedDay 过期多少天就进行清理 + * @param deleteLimit 清理的间隔条数 + */ + Integer cleanAccessToken(Integer exceedDay, Integer deleteLimit); } 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 0b38bd9..8bcff76 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 @@ -243,4 +243,35 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService { return IdUtil.fastSimpleUUID(); } + @Override + public Integer cleanRefreshToken(Integer exceedDay, Integer deleteLimit) { + int count = 0; + LocalDateTime expireDate = LocalDateTime.now().minusDays(exceedDay); + // 循环删除,直到没有满足条件的数据 + for (int i = 0; i < Short.MAX_VALUE; i++) { + int deleteCount = oauth2RefreshTokenMapper.deleteByExpiresTimeLt(expireDate, deleteLimit); + count += deleteCount; + // 达到删除预期条数,说明到底了 + if (deleteCount < deleteLimit) { + break; + } + } + return count; + } + + @Override + public Integer cleanAccessToken(Integer exceedDay, Integer deleteLimit) { + int count = 0; + LocalDateTime expireDate = LocalDateTime.now().minusDays(exceedDay); + // 循环删除,直到没有满足条件的数据 + for (int i = 0; i < Short.MAX_VALUE; i++) { + int deleteCount = oauth2AccessTokenMapper.deleteByExpiresTimeLt(expireDate, deleteLimit); + count += deleteCount; + // 达到删除预期条数,说明到底了 + if (deleteCount < deleteLimit) { + break; + } + } + return count; + } } -- libgit2 0.21.4