【7.0.2】【auth】更新自动清除无用登录用户的定时器

pull/6/head
fengshuonan 2021-04-01 13:55:29 +08:00
parent f14ae6b1c2
commit 75b4a5dc76
3 changed files with 85 additions and 0 deletions

View File

@ -24,6 +24,14 @@
<version>7.0.2</version>
</dependency>
<!--定时任务的api-->
<!--用来自动清理过期的登录用户缓存-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>timer-api</artifactId>
<version>7.0.2</version>
</dependency>
<!--日志记录模块的api-->
<!--记录登录日志用-->
<dependency>

View File

@ -0,0 +1,65 @@
package cn.stylefeng.roses.kernel.auth.session.timer;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
import cn.stylefeng.roses.kernel.timer.api.TimerAction;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
*
*
* @author fengshuonan
* @date 2021/3/30 11:19
*/
public class ClearInvalidLoginUserCacheTimer implements TimerAction {
/**
*
*/
private final CacheOperatorApi<LoginUser> loginUserCacheOperatorApi;
/**
* tokentoken
*/
private final CacheOperatorApi<Set<String>> allPlaceLoginTokenCache;
public ClearInvalidLoginUserCacheTimer(CacheOperatorApi<LoginUser> loginUserCacheOperatorApi, CacheOperatorApi<Set<String>> allPlaceLoginTokenCache) {
this.loginUserCacheOperatorApi = loginUserCacheOperatorApi;
this.allPlaceLoginTokenCache = allPlaceLoginTokenCache;
}
@Override
public void action() {
Collection<String> allOnlineUsers = allPlaceLoginTokenCache.getAllKeys();
if (ObjectUtil.isNotEmpty(allOnlineUsers)) {
for (String userId : allOnlineUsers) {
// 获取当前用户的所有token
Set<String> userTokens = allPlaceLoginTokenCache.get(userId);
// 新的userToken
Set<String> newUserTokens = new HashSet<>();
// 因为有的token用户没有点退出清空这里遍历一下清空无效的userToken
for (String userToken : userTokens) {
LoginUser loginUser = loginUserCacheOperatorApi.get(userToken);
if (loginUser != null) {
newUserTokens.add(userToken);
}
}
// 如果userToken都过期了这个set整体清除掉
if (ObjectUtil.isEmpty(newUserTokens)) {
allPlaceLoginTokenCache.remove(userId);
} else {
allPlaceLoginTokenCache.put(userId, newUserTokens);
}
}
}
}
}

View File

@ -38,6 +38,7 @@ import cn.stylefeng.roses.kernel.auth.session.DefaultSessionManager;
import cn.stylefeng.roses.kernel.auth.session.cache.logintoken.MemoryLoginTokenCache;
import cn.stylefeng.roses.kernel.auth.session.cache.loginuser.MemoryLoginUserCache;
import cn.stylefeng.roses.kernel.auth.session.cookie.DefaultSessionCookieCreator;
import cn.stylefeng.roses.kernel.auth.session.timer.ClearInvalidLoginUserCacheTimer;
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
import cn.stylefeng.roses.kernel.cache.api.constants.CacheConstants;
import cn.stylefeng.roses.kernel.jwt.JwtTokenOperator;
@ -162,4 +163,15 @@ public class GunsAuthAutoConfiguration {
return new DefaultSessionManager(loginUserCache, allPlaceLoginTokenCache, sessionExpiredSeconds, sessionCookieCreator());
}
/**
*
*
* @author fengshuonan
* @date 2021/3/30 11:32
*/
@Bean
public ClearInvalidLoginUserCacheTimer clearInvalidLoginUserCacheTimer() {
return new ClearInvalidLoginUserCacheTimer(loginUserCache(), allPlaceLoginTokenCache());
}
}