From e0b2dc119a1779c11966b8893419637a1f911b9e Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Tue, 16 Apr 2024 17:59:25 +0800 Subject: [PATCH 1/3] =?UTF-8?q?add=20=E6=96=B0=E5=A2=9E=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E8=AE=BE=E5=A4=87=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../monitor/SysUserOnlineController.java | 39 +++++++++++++++++++ .../dromara/system/domain/SysUserOnline.java | 1 - 2 files changed, 39 insertions(+), 1 deletion(-) 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 def448d4d..699633288 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 @@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; /** * 在线用户监控 @@ -87,4 +88,42 @@ public class SysUserOnlineController extends BaseController { } return R.ok(); } + + /** + * 获取当前用户登录在线设备 + */ + @GetMapping("/getInfo") + public TableDataInfo getInfo() { + // 获取指定账号 id 的 token 集合 + List tokenIds = StpUtil.getTokenValueListByLoginId(StpUtil.getLoginIdAsString()); + List 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 userOnlineList = BeanUtil.copyToList(userOnlineDTOList, SysUserOnline.class); + return TableDataInfo.build(userOnlineList); + } + + /** + * 删除当前在线设备 + * + * @param tokenId token值 + */ + @DeleteMapping("/remove/{tokenId}") + public R remove(@PathVariable("tokenId") String tokenId) { + try { + // 获取指定账号 id 的 token 集合 + List keys = StpUtil.getTokenValueListByLoginId(StpUtil.getLoginIdAsString()); + keys.stream() + .filter(key -> key.equals(tokenId)) + .findFirst() + .ifPresent(key -> StpUtil.kickoutByTokenValue(tokenId)); + } catch (NotLoginException ignored) { + } + return R.ok(); + } + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserOnline.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserOnline.java index 6def906e1..ba30eb609 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserOnline.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserOnline.java @@ -7,7 +7,6 @@ import lombok.Data; * * @author Lion Li */ - @Data public class SysUserOnline { From 093808589f7638525a8c686080a56158d7c14699 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Wed, 17 Apr 2024 09:02:51 +0800 Subject: [PATCH 2/3] =?UTF-8?q?update=20=E5=9C=A8=E7=BA=BF=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E8=AE=BE=E5=A4=87=E7=AE=A1=E7=90=86=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=80=80=E5=87=BA=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/monitor/SysUserOnlineController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 699633288..33d01968f 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 @@ -108,10 +108,11 @@ public class SysUserOnlineController extends BaseController { } /** - * 删除当前在线设备 + * 强退当前在线设备 * * @param tokenId token值 */ + @Log(title = "在线设备", businessType = BusinessType.FORCE) @DeleteMapping("/remove/{tokenId}") public R remove(@PathVariable("tokenId") String tokenId) { try { From 4b37688592ece7e674d0c8ce456ccf2366a31b17 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 19 Apr 2024 10:56:29 +0800 Subject: [PATCH 3/3] =?UTF-8?q?update=20=E5=9C=A8=E7=BA=BF=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E8=AE=BE=E5=A4=87=E7=AE=A1=E7=90=86=E4=B8=8E=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E8=AF=B7=E6=B1=82=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/monitor/SysUserOnlineController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 33d01968f..9b08c2d2c 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 @@ -92,7 +92,7 @@ public class SysUserOnlineController extends BaseController { /** * 获取当前用户登录在线设备 */ - @GetMapping("/getInfo") + @GetMapping() public TableDataInfo getInfo() { // 获取指定账号 id 的 token 集合 List tokenIds = StpUtil.getTokenValueListByLoginId(StpUtil.getLoginIdAsString()); @@ -113,7 +113,7 @@ public class SysUserOnlineController extends BaseController { * @param tokenId token值 */ @Log(title = "在线设备", businessType = BusinessType.FORCE) - @DeleteMapping("/remove/{tokenId}") + @PostMapping("/{tokenId}") public R remove(@PathVariable("tokenId") String tokenId) { try { // 获取指定账号 id 的 token 集合