mirror of https://gitee.com/stylefeng/roses
【7.0.2】【auth】更新自动清除无用登录用户的定时器
parent
f14ae6b1c2
commit
75b4a5dc76
|
@ -24,6 +24,14 @@
|
||||||
<version>7.0.2</version>
|
<version>7.0.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!--定时任务的api-->
|
||||||
|
<!--用来自动清理过期的登录用户缓存-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.stylefeng.roses</groupId>
|
||||||
|
<artifactId>timer-api</artifactId>
|
||||||
|
<version>7.0.2</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!--日志记录模块的api-->
|
<!--日志记录模块的api-->
|
||||||
<!--记录登录日志用-->
|
<!--记录登录日志用-->
|
||||||
<dependency>
|
<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.logintoken.MemoryLoginTokenCache;
|
||||||
import cn.stylefeng.roses.kernel.auth.session.cache.loginuser.MemoryLoginUserCache;
|
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.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.CacheOperatorApi;
|
||||||
import cn.stylefeng.roses.kernel.cache.api.constants.CacheConstants;
|
import cn.stylefeng.roses.kernel.cache.api.constants.CacheConstants;
|
||||||
import cn.stylefeng.roses.kernel.jwt.JwtTokenOperator;
|
import cn.stylefeng.roses.kernel.jwt.JwtTokenOperator;
|
||||||
|
@ -162,4 +163,15 @@ public class GunsAuthAutoConfiguration {
|
||||||
return new DefaultSessionManager(loginUserCache, allPlaceLoginTokenCache, sessionExpiredSeconds, sessionCookieCreator());
|
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