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

2024-05-28 13:52

本文主要是介绍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 + ip,去 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 + ip

4.最后

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

5.参考

jeecgboot 登录用户唯一实现方式

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

这篇关于jeecgboot 同一账号只允许一个人登录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1010750

相关文章

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

Oracle登录时忘记用户名或密码该如何解决

《Oracle登录时忘记用户名或密码该如何解决》:本文主要介绍如何在Oracle12c中忘记用户名和密码时找回或重置用户账户信息,文中通过代码介绍的非常详细,对同样遇到这个问题的同学具有一定的参... 目录一、忘记账户:二、忘记密码:三、详细情况情况 1:1.1. 登录到数据库1.2. 查看当前用户信息1.