package com.ruoyi.system.util;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.ruoyi.common.core.utils.JwtUtils;
|
import com.ruoyi.common.redis.service.RedisService;
|
import com.ruoyi.common.security.auth.AuthUtil;
|
import com.ruoyi.system.api.domain.SysUser;
|
import com.ruoyi.system.service.ISysUserService;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.util.List;
|
|
|
/**
|
* @author zhibing.pu
|
* @date 2023/7/11 8:39
|
*/
|
@Component
|
public class TaskUtil {
|
|
@Resource
|
private ISysUserService sysUserService;
|
|
@Resource
|
private RedisService redisService;
|
|
|
/**
|
* 每分钟检测后台用户是否有30分钟未进行操作
|
*/
|
@Scheduled(fixedRate = 60000)
|
public void taskLogout() {
|
List<SysUser> list = sysUserService.list(new LambdaQueryWrapper<SysUser>().eq(SysUser::getDelFlag, "0").eq(SysUser::getStatus, "0"));
|
for (SysUser sysUser : list) {
|
Object lastTime = redisService.getCacheObject("lastTime:" + sysUser.getUserId());
|
if(null == lastTime){
|
Object cacheObject = redisService.getCacheObject("login_tokens:" + sysUser.getUserId());
|
if(null != cacheObject){
|
String token = cacheObject.toString();
|
// 删除用户缓存记录
|
AuthUtil.logoutByToken(token);
|
}
|
}else{
|
Long last = Long.valueOf(lastTime.toString());
|
//操作登录或者时间差值小于30分钟,写入新的数据到缓存中
|
if(System.currentTimeMillis() - last >= 1800000L){
|
Object cacheObject = redisService.getCacheObject("login_tokens:" + sysUser.getUserId());
|
if(null != cacheObject){
|
String token = cacheObject.toString();
|
// 删除用户缓存记录
|
AuthUtil.logoutByToken(token);
|
}
|
}
|
}
|
}
|
}
|
|
}
|