ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
@@ -22,7 +22,6 @@ import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -42,10 +41,12 @@ @SaCheckPermission("monitor:online:list") @GetMapping("/list") public TableDataInfo<SysUserOnline> list(String ipaddr, String userName) { Collection<String> keys = RedisUtils.keys(Constants.ONLINE_TOKEN_KEY + "*"); // 获取所有未过期的 token List<String> keys = StpUtil.searchTokenValue("", -1, 0); List<UserOnlineDTO> userOnlineDTOList = new ArrayList<>(); for (String key : keys) { userOnlineDTOList.add(RedisUtils.getCacheObject(key)); String onlineKey = key.replace(Constants.LOGIN_TOKEN_KEY, Constants.ONLINE_TOKEN_KEY); userOnlineDTOList.add(RedisUtils.getCacheObject(onlineKey)); } if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) { userOnlineDTOList = userOnlineDTOList.stream().filter(userOnline -> ruoyi-framework/src/main/java/com/ruoyi/framework/config/SaTokenConfig.java
@@ -9,6 +9,7 @@ import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.config.properties.SecurityProperties; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -20,6 +21,7 @@ * * @author Lion Li */ @Slf4j @Configuration public class SaTokenConfig implements WebMvcConfigurer { @@ -40,12 +42,12 @@ // 排除下不需要拦截的 .notMatch(securityProperties.getExcludes()) .check(() -> { Long userId = SecurityUtils.getUserId(); if (StringUtils.isNotNull(userId)) { long tokenTimeout = StpUtil.getTokenTimeout(); long tokenActivityTimeout = StpUtil.getTokenActivityTimeout(); System.out.println("剩余有效时间: " + tokenTimeout); System.out.println("临时有效时间: " + tokenActivityTimeout); if (log.isDebugEnabled()) { Long userId = SecurityUtils.getUserId(); if (StringUtils.isNotNull(userId)) { log.debug("剩余有效时间: {}", StpUtil.getTokenTimeout()); log.debug("临时有效时间: {}", StpUtil.getTokenActivityTimeout()); } } }); })).addPathPatterns("/**"); ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java
@@ -1,5 +1,6 @@ package com.ruoyi.framework.listener; import cn.dev33.satoken.config.SaTokenConfig; import cn.dev33.satoken.listener.SaTokenListener; import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.StpUtil; @@ -12,7 +13,10 @@ import com.ruoyi.common.utils.*; import com.ruoyi.common.utils.ip.AddressUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; /** * 用户行为 侦听器的实现 @@ -20,6 +24,9 @@ @Component @Slf4j public class UserActionListener implements SaTokenListener { @Autowired private SaTokenConfig saTokenConfig; /** * 每次登录时触发 @@ -43,7 +50,7 @@ if (StringUtils.isNotNull(user.getDept())) { userOnlineDTO.setDeptName(user.getDept().getDeptName()); } RedisUtils.setCacheObject(Constants.ONLINE_TOKEN_KEY + tokenValue, userOnlineDTO); RedisUtils.setCacheObject(Constants.ONLINE_TOKEN_KEY + tokenValue, userOnlineDTO, saTokenConfig.getTimeout(), TimeUnit.SECONDS); log.info("user doLogin, useId:{}, token:{}", loginId, tokenValue); } else if (userType == UserType.APP_USER) { // app端 自行根据业务编写