mirror of
https://gitee.com/hhyykk/ipms-sjy.git
synced 2025-07-13 02:25:06 +08:00
移除超时的在线用户-完成
修改ruoyi-vue-pro.sql 新增表字段SysUserSessionDO.java#sessionTimeout
This commit is contained in:
@ -10,6 +10,8 @@ import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 在线用户表
|
||||
*
|
||||
@ -44,5 +46,9 @@ public class SysUserSessionDO extends BaseDO {
|
||||
* 浏览器 UA
|
||||
*/
|
||||
private String userAgent;
|
||||
/**
|
||||
* 会话超时时间
|
||||
*/
|
||||
private Date sessionTimeout;
|
||||
|
||||
}
|
||||
|
@ -8,6 +8,8 @@ import cn.iocoder.dashboard.modules.system.dal.dataobject.auth.SysUserSessionDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface SysUserSessionMapper extends BaseMapperX<SysUserSessionDO> {
|
||||
@ -18,4 +20,7 @@ public interface SysUserSessionMapper extends BaseMapperX<SysUserSessionDO> {
|
||||
.likeIfPresent("user_ip", reqVO.getUserIp()));
|
||||
}
|
||||
|
||||
default List<SysUserSessionDO> selectSessionTimeout() {
|
||||
return selectList(new QueryWrapperX<SysUserSessionDO>().lt("session_timeout",new Date()));
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,12 @@
|
||||
package cn.iocoder.dashboard.modules.system.job.auth;
|
||||
|
||||
import cn.iocoder.dashboard.framework.quartz.core.handler.JobHandler;
|
||||
import cn.iocoder.dashboard.modules.system.service.auth.SysUserSessionService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 用户 Session 超时 Job
|
||||
*
|
||||
@ -13,10 +16,14 @@ import org.springframework.stereotype.Component;
|
||||
@Slf4j
|
||||
public class SysUserSessionTimeoutJob implements JobHandler {
|
||||
|
||||
@Resource
|
||||
SysUserSessionService sysUserSessionService;
|
||||
|
||||
@Override
|
||||
public String execute(String param) throws Exception {
|
||||
// System.out.println("执行了一次任务");
|
||||
log.info("[execute][执行任务:{}]", param);
|
||||
log.info("[execute][执行任务:{}]", "清除过期用户信息");
|
||||
long timeoutCount = sysUserSessionService.clearSessionTimeout();
|
||||
log.info("[execute][执行任务:{}]", "清楚过期用户信息完成" + timeoutCount);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -60,4 +60,12 @@ public interface SysUserSessionService {
|
||||
*/
|
||||
PageResult<SysUserSessionDO> getUserSessionPage(SysUserSessionPageReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 移除超时的在线用户
|
||||
* @param
|
||||
* @return {@link Long}
|
||||
* @author Lyon
|
||||
* @date 2021/3/7
|
||||
**/
|
||||
long clearSessionTimeout();
|
||||
}
|
||||
|
@ -7,18 +7,21 @@ import cn.iocoder.dashboard.common.pojo.PageResult;
|
||||
import cn.iocoder.dashboard.framework.security.config.SecurityProperties;
|
||||
import cn.iocoder.dashboard.framework.security.core.LoginUser;
|
||||
import cn.iocoder.dashboard.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO;
|
||||
import cn.iocoder.dashboard.modules.system.dal.mysql.auth.SysUserSessionMapper;
|
||||
import cn.iocoder.dashboard.modules.system.dal.dataobject.auth.SysUserSessionDO;
|
||||
import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
|
||||
import cn.iocoder.dashboard.modules.system.dal.mysql.auth.SysUserSessionMapper;
|
||||
import cn.iocoder.dashboard.modules.system.dal.redis.auth.SysLoginUserRedisDAO;
|
||||
import cn.iocoder.dashboard.modules.system.service.auth.SysUserSessionService;
|
||||
import cn.iocoder.dashboard.modules.system.service.user.SysUserService;
|
||||
import cn.iocoder.dashboard.util.date.DateUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.dashboard.modules.system.dal.redis.SysRedisKeyConstants.LOGIN_USER;
|
||||
import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertSet;
|
||||
|
||||
/**
|
||||
@ -49,7 +52,9 @@ public class SysUserSessionServiceImpl implements SysUserSessionService {
|
||||
loginUserRedisDAO.set(sessionId, loginUser);
|
||||
// 写入 DB 中
|
||||
SysUserSessionDO userSession = SysUserSessionDO.builder().id(sessionId)
|
||||
.userId(loginUser.getId()).userIp(userIp).userAgent(userAgent).build();
|
||||
.userId(loginUser.getId()).userIp(userIp).userAgent(userAgent)
|
||||
.sessionTimeout(DateUtils.addTime(LOGIN_USER.getTimeout()))
|
||||
.build();
|
||||
userSessionMapper.insert(userSession);
|
||||
// 返回 Session 编号
|
||||
return sessionId;
|
||||
@ -63,6 +68,7 @@ public class SysUserSessionServiceImpl implements SysUserSessionService {
|
||||
// 更新 DB 中
|
||||
SysUserSessionDO updateObj = SysUserSessionDO.builder().id(sessionId).build();
|
||||
updateObj.setUpdateTime(new Date());
|
||||
updateObj.setSessionTimeout(DateUtils.addTime(LOGIN_USER.getTimeout()));
|
||||
userSessionMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@ -97,6 +103,18 @@ public class SysUserSessionServiceImpl implements SysUserSessionService {
|
||||
return userSessionMapper.selectPage(reqVO, userIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long clearSessionTimeout() {
|
||||
Long timeoutCount = 0L;
|
||||
List<SysUserSessionDO> sessionDOS = userSessionMapper.selectSessionTimeout();
|
||||
for (SysUserSessionDO sessionDO : sessionDOS) {
|
||||
if (loginUserRedisDAO.get(sessionDO.getId()) == null) {
|
||||
timeoutCount += userSessionMapper.deleteById(sessionDO.getId());
|
||||
}
|
||||
}
|
||||
return timeoutCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成 Session 编号,目前采用 UUID 算法
|
||||
*
|
||||
|
Reference in New Issue
Block a user