jeecgboot 同一账号只允许一个人登录

1.需求分析

  • jeecgboot 框架要实现同一个账号只允许一个人登录,就跟游戏账号类似,“我登录了就把你踢下去,你登录了就把我踢下去”;
  • jwt 原理是生成 token 后一段时间内登录都有效,jeecgboot 中 jwt 和 redis 联合使用后,在 redis 中 用户过期的 key 是 CommonConstant.PREFIX_USER_TOKEN + token,token 几乎是唯一的
  • 想到JwtUtil.verify(cacheToken, userName, passWord)方法验证的时候想办法给他返回 false,但是发现只要 token 没过期第一个人登录的还是能访问
  • 第二个人登录后,怎样让第一个人访问不了呢?既不能改第一个人浏览器中的 token 信息,又不能把 jwt verify()方法重写了(水平不够,放弃重写);那我就直接把第一个人登录的 key(CommonConstant.PREFIX_USER_TOKEN+token)删了吧,第一人登录的 key 都没有了,这样第一人就下线了。
  • 怎样获取第一人的 key 呢,改写 key 前缀,原来是 CommonConstant.PREFIX_USER_TOKEN + token,改成CommonConstant.PREFIX_USER_TOKEN + admin + token,去 redis 里面查询前缀是CommonConstant.PREFIX_USER_TOKEN + admin的 samePrefixKeys ,然后把 samePrefixKeys 都删了

2.上代码

在这里插入图片描述

private void onlyOnePlaceLogin(String username,String id) {
		List<String> keys = redisUtil.keys(CommonConstant.PREFIX_USER_TOKEN+username);
		keys.forEach(key -> deleteLoginInfo(key,username,id));
	}
//参考 logout 方法
private void deleteLoginInfo(String key, String username,String id) {
	//清空用户登录Token缓存
	redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + username);
	//清空用户登录Shiro权限缓存
	redisUtil.del(CommonConstant.PREFIX_USER_SHIRO_CACHE + id);
	//清空用户的缓存信息(包括部门信息),例如sys:cache:user::<username>
	redisUtil.del(String.format("%s::%s", CacheConstant.SYS_USERS_CACHE, username));
	}

3.关联修改

在项目中所有用到 CommonConstant.PREFIX_USER_TOKEN + tokenkey 的地方换成CommonConstant.PREFIX_USER_TOKEN + name + token

4.最后

结束了,这个方案还没真正上线,只是本地测试没问题,欢迎大家讨论

5.参考

jeecgboot 登录用户唯一实现方式

Springboot集成JWT+Redis实现单点登录和同一账号只允许在一处登录

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
JeecgBoot是一套基于代码生成器的快速开发框架,它结合了当前主流的技术,可以帮助我们快速构建一个报修程序。 首先,我们可以通过JeecgBoot的代码生成器生成报修程序的基础代码。我们可以定义报修单的相关字段,如报修人、报修时间、报修内容等。同时,我们可以生成相关的数据表、实体类和数据库访问层代码。 接下来,我们可以在JeecgBoot的生成代码的基础上进行二次开发。我们可以通过自定义页面来实现报修单的录入页面和报修单列表展示页面。我们可以利用JeecgBoot提供的表单设计器来快速布局报修单录入页面,并通过配置字段校验规则和必填项等来保证数据的准确性和完整性。同时,我们可以利用JeecgBoot的列表配置功能来自定义报修单列表展示的字段和查询条件,以便用户能够方便地查询和管理报修单。 此外,我们可以借助JeecgBoot的权限管理功能来设置报修程序的用户权限。我们可以定义不同角色的权限,并将其与对应的报修单操作关联起来,例如,只有管理员角色才能删除报修单,普通用户只能新增和修改报修单。 另外,JeecgBoot还提供了集成工作流引擎的功能,我们可以使用工作流引擎来对报修单进行审核和流转操作。例如,当用户提交报修单后,系统会自动发送通知给相关处理人,并根据其权限进行流程审批操作。 总结来说,使用JeecgBoot开发报修程序可以帮助我们快速构建一个功能完善、易于使用的报修系统。通过其代码生成器和二次开发功能,我们可以轻松实现报修单的录入、展示和管理,同时结合权限管理和工作流引擎,使报修流程更加规范和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值