From f1208474f771a1c233d7425c8ed13fbaa0d521ac Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期三, 12 三月 2025 09:35:13 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/5.X' into 5.X --- ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysUserOnlineController.java | 50 +++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 45 insertions(+), 5 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysUserOnlineController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysUserOnlineController.java index 0e626d0..1cab232 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysUserOnlineController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysUserOnlineController.java @@ -4,8 +4,8 @@ import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; +import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.CacheConstants; -import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.dto.UserOnlineDTO; import org.dromara.common.core.utils.StreamUtils; @@ -16,12 +16,13 @@ import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.web.core.BaseController; import org.dromara.system.domain.SysUserOnline; -import lombok.RequiredArgsConstructor; 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; /** * 鍦ㄧ嚎鐢ㄦ埛鐩戞帶 @@ -43,12 +44,12 @@ @GetMapping("/list") public TableDataInfo<SysUserOnline> list(String ipaddr, String userName) { // 鑾峰彇鎵�鏈夋湭杩囨湡鐨� token - List<String> keys = StpUtil.searchTokenValue("", 0, -1, false); + Collection<String> keys = RedisUtils.keys(CacheConstants.ONLINE_TOKEN_KEY + "*"); List<UserOnlineDTO> userOnlineDTOList = new ArrayList<>(); for (String key : keys) { - String token = key.replace(GlobalConstants.LOGIN_TOKEN_KEY, ""); + String token = StringUtils.substringAfterLast(key, ":"); // 濡傛灉宸茬粡杩囨湡鍒欒烦杩� - if (StpUtil.stpLogic.getTokenActivityTimeoutByToken(token) < -1) { + if (StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) < -1) { continue; } userOnlineDTOList.add(RedisUtils.getCacheObject(CacheConstants.ONLINE_TOKEN_KEY + token)); @@ -88,4 +89,43 @@ } return R.ok(); } + + /** + * 鑾峰彇褰撳墠鐢ㄦ埛鐧诲綍鍦ㄧ嚎璁惧 + */ + @GetMapping() + public TableDataInfo<SysUserOnline> getInfo() { + // 鑾峰彇鎸囧畾璐﹀彿 id 鐨� token 闆嗗悎 + List<String> tokenIds = StpUtil.getTokenValueListByLoginId(StpUtil.getLoginIdAsString()); + List<UserOnlineDTO> userOnlineDTOList = tokenIds.stream() + .filter(token -> StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) >= -1) + .map(token -> (UserOnlineDTO) RedisUtils.getCacheObject(CacheConstants.ONLINE_TOKEN_KEY + token)) + .collect(Collectors.toList()); + //澶嶅埗鍜屽鐞� SysUserOnline 瀵硅薄鍒楄〃 + Collections.reverse(userOnlineDTOList); + userOnlineDTOList.removeAll(Collections.singleton(null)); + List<SysUserOnline> userOnlineList = BeanUtil.copyToList(userOnlineDTOList, SysUserOnline.class); + return TableDataInfo.build(userOnlineList); + } + + /** + * 寮洪��褰撳墠鍦ㄧ嚎璁惧 + * + * @param tokenId token鍊� + */ + @Log(title = "鍦ㄧ嚎璁惧", businessType = BusinessType.FORCE) + @DeleteMapping("/myself/{tokenId}") + public R<Void> remove(@PathVariable("tokenId") String tokenId) { + try { + // 鑾峰彇鎸囧畾璐﹀彿 id 鐨� token 闆嗗悎 + List<String> keys = StpUtil.getTokenValueListByLoginId(StpUtil.getLoginIdAsString()); + keys.stream() + .filter(key -> key.equals(tokenId)) + .findFirst() + .ifPresent(key -> StpUtil.kickoutByTokenValue(tokenId)); + } catch (NotLoginException ignored) { + } + return R.ok(); + } + } -- Gitblit v1.9.3