From 3c8d864b5f68af5167199e0d5c9ff6c0c5852638 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期一, 20 一月 2025 11:35:45 +0800 Subject: [PATCH] !639 发布 5.3.0-BETA 公测版本 Merge pull request !639 from 疯狂的狮子Li/dev --- ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysUserOnlineController.java | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 42 insertions(+), 1 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 def448d..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 @@ -19,8 +19,10 @@ 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,7 +44,7 @@ @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 = StringUtils.substringAfterLast(key, ":"); @@ -87,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