当前位置:首页 >> 编程语言 >> 【Sa-Token】9、Sa-Token实现在线用户管理功能,a7rm3

【Sa-Token】9、Sa-Token实现在线用户管理功能,a7rm3

cpugpu芯片开发光刻机 编程语言 1
文件名:【Sa-Token】9、Sa-Token实现在线用户管理功能,a7rm3 【Sa-Token】9、Sa-Token实现在线用户管理功能

尽管框架将大部分操作提供了简易的封装,但在一些特殊场景下,我们仍需要绕过框架,直达数据底层进行一些操作。

1、官方文档

会话查询

https://sa-token.cc/doc.html#/up/search-session

Sa-Token提供以下API助你直接操作会话列表:

// 查询所有已登录的 TokenStpUtil.searchTokenValue(String keyword, int start, int size, boolean sortType);// 查询所有账号 Session 会话StpUtil.searchSessionId(String keyword, int start, int size, boolean sortType);// 查询所有令牌 Session 会话StpUtil.searchTokenSessionId(String keyword, int start, int size, boolean sortType);

参数详解:

keyword: 查询关键字,只有包括这个字符串的 token 值才会被查询出来。start: 数据开始处索引。size: 要获取的数据条数 (值为-1代表一直获取到末尾)。sortType: 排序方式(true=正序:先登录的在前,false=反序:后登录的在前)。 2、效果预览

由图中可以看出,我们查询了在线用户的基本登录信息,包括(账号、姓名、部门、登录IP、登录位置、操作系统、登录设备类型、浏览器信息)等信息,还提供了【强退】的功能按钮

3、在线用户查询 public TableInfoVO list(int page, int size) {// 返回数据对象List<LoginUserRespVO> list = new ArrayList<>();// 获取所有登录的用户idsList<String> logIds = StpUtil.searchSessionId("", 0, -1, false);// 便利获取登录信息SaSession session = null;for (int i = page * size, len = Math.min(size + i, logIds.size()); i < len; i++) {session = StpUtil.getSessionBySessionId(logIds.get(i));list.add(session.getModel("user_info", LoginUserRespVO.class));}return TableInfoVO.ok(logIds.size(), list);}

通过 sa-token 提供的会话查询方法,底层是用的 keys 命令,然后根据分页参数,截取我们需要的数据,再根据会话查询登录用户信息

4、用户强退 public RES updateQuitOnline(Long[] ids) {// 强制下线for (Long item : ids) {StpUtil.kickout(item);}return RES.success();}

由前端传回需要强退的用户登录 id,调用 StpUtil.kickout(Object loginId); 方法,即可实现让用户强制下线操作

5、注意事项

由于会话查询底层采用了遍历方式获取数据,当数据量过大时此操作将会比较耗时,有多耗时呢?这里提供一份参考数据:

单机模式下:百万会话取出10条 Token 平均耗时 0.255s。Redis模式下:百万会话取出10条 Token 平均耗时 3.322s。

请根据业务实际水平合理调用API。

基于活动 Token 的统计方式会比实际情况略有延迟,如果需要精确统计实时在线用户信息建议采用 WebSocket。

如您在阅读中发现不足,欢迎留言!!!

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接