mirror of https://gitee.com/stylefeng/roses
【7.0.2】【auth】更新自动清除无用登录用户的定时器
parent
f14ae6b1c2
commit
75b4a5dc76
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* 用户token的缓存,这个缓存用来存储一个用户的所有token
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue