小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
本节介绍RuoYi-Vue的ruoyi-admin模块中的上传下载模块SysUserOnlineController 部分的代码,这个接口主要用来展示在线用户监控模块的情况
列表页面
这个接口是直接从Redis里面找到所有的登录用户信息的key出来,直接遍历将所有的数据返回到前端。
获取所有的登录key
使用的是Redis的 Keys 命令
Collection<String> keys = redisCache.keys(Constants.LOGIN_TOKEN_KEY + "*");
使用Keys命令将所有的login_tokens:*获取出来
遍历所有的key获取所有的用户缓存
LoginUser user = redisCache.getCacheObject(key);
之后就是对LoginUser进行类型转化了,这个接口是将所有的登录用户的信息一次性的返回到前台,50多用户就有11kb,如果用户量更多,那么肯定更慢,但是有好的办法来分页查询已登录的用户么?我觉得对于当前这种Redis里面保存登录用户的形式来说没有比较好的方式来避免。如果登录用户大数据量的话,可以考虑将登录用户的信息除了放到Redis里面还保存一份放到es里面,这样就可以去用es来分页了
不要忘记最后还要将得到的userlist进行次序反转。
Collections.reverse(userOnlineList);
userOnlineList.removeAll(Collections.singleton(null));
强退用户
redisCache.deleteObject(Constants.LOGIN_TOKEN_KEY + tokenId);
将用户的tokenId传入进来直接deleteObject掉Redis里面对应的key
总结
对于小项目而言,这两个简单的功能就可以满足对用户管理的需求了,但是无用户态访问在网站实际业务中还是需要考虑是不是存在的,如果无需登录就能访问网站,那么就没有办法来进行访问控制了,这时候就要考虑别的手段来进行访问控制了。