最近在做一个功能,要求是这样的:相同的账号,例如admin账号,在A电脑登录成功,然后admin账号在B电脑登录,系统发现admin账号出现了重复登录,A电脑上登录的admin账号就会被退出登录。

流程图:

我的具体实现方式如下:

1、admin账号在A电脑登录某系统,在登录成功之前,查询redis是否存在登录信息,登录信息结构为:key=用户名,value=sessionid,如果存在,用map集合存起来,如果不存在,则往redis存入登录信息,数据结构是:key=用户名,value=sessionid。

2、把sessionid存入cookie中,不设置过期时间,浏览器关闭则失效

3、如果登录不成功,比如密码错误,则把存在redis中的登录信息删除,如果之前就有存在登录信息,则需要还原信息,从第1步中的map中取出临时存储的登录信息还原到redis上。

4、系统检测admin账号是否重复登录,可以使用拦截器,拦截除了登录请求之外的所有请求,判断admin账号是否已经在其他地方登录,如果是,则马上退出登录。如何判断admin账号是否已经在其他地方登录?实现思路:

①、拦截器方法中获取到sessionid,通过账号名获取到redis上面的sessionid;

②、对比两个sessionid,如果不相等,则说明admin账号在其他地方登录了,当前登录即刻退出登录。

5、使用浏览器的sessionid作为判断标准,那么就是同一台电脑里不同浏览器的sessionid就会不一致,意思就是admin账号不能再多个浏览器登录了。

6、session的默认过期时间是30分钟,在springboot的项目中如何设置session的存活时间呢?可以在配置文件中设置,也可以在启动类中加上一下一段代码即可:

//设置session过期时间
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {return new EmbeddedServletContainerCustomizer() {@Overridepublic void customize(ConfigurableEmbeddedServletContainer container) {container.setSessionTimeout(10800);// 单位为S}};
}

7、我做的项目是springboot+springcloud的系统,有多个模块,就有多个启动tomcat,那么在浏览器在访问A模块的时候得到的sessionid和浏览器访问B模块的时候获取到的sessionid是不一样的。加入登录功能在A模块中,那么redis上的sessionid就是对应A模块服务器的。这就导致了B模块拿到的sessionid和redis上的sessionid不一致,这就导致了不管admin账号是否有重复登录,用户访问B模块的时候,都会退出登录。如何解决这个问题?思路如下:

①、由于系统是在同一个浏览器上面打开的,模块集成在同一个主页中,登录的时候,把在对应A模块的sessionid存在cookie里。

②、其他模块就从cookie里面获取sessionid,就可以实现多个模块使用同一个sessionid了。

8、其实按照第7点那样的做法是有点麻烦了,可以用网关实现拦截器,这样的话就可以不管什么模块,所有的请求都经过拦截器,就可以完美解决问题了,我为什么不这样做?是因为我们系统没有网关,这个后续应该会改进。

思路就是这样,亲测可以达到想要的效果,希望能帮助你们。如果你们有什么更好的建议,欢迎留言赐教。

9、第9点是2019年3月22日添加的,按照以上方法完成开发后,有一个bug,就是正常登录后,如果模块重启了,正常登录的用户就会被踢出登录并提示有异地登录,这样是不对的,提示会让用户产生疑惑.解决这个bug的方法是:

在模块启动完成后清除redis上的ticket标识,这样用户就不会收到错误的提示了,因为出现异地登录提示首先是要ticket通过拦截器,如果ticket都不存在了,就无法通过拦截器,也就不存在异地登录的提示了.直接让用户重新登录就好.

用户唯一登录,最新登录挤掉以前的登录,实现踢人.相关推荐

  1. 【微信小程序】登录功能实现及讲解(获取用户唯一标识)

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 正文: 功能:登录实现并获取到用户唯一标识 官方文档地址:可以先看完我的文章再看官方地址 实现步骤:1.调用微 ...

  2. 登录实现并获取到用户唯一标识

    正文: 功能:登录实现并获取到用户唯一标识 官方文档地址:可以先看完我的文章再看官方地址 实现步骤:1.调用微信API wx.login()得到code  2.把得到的code传给后端,在后端请求 h ...

  3. (JAVA)支付宝小程序登录相关(authToken获取用户唯一userId、encryptedData解密手机号)

    前言: 最近公司做一个支付宝小程序项目,用支付宝userId做唯一用户id,后台encryptedData解密出用户支付宝绑定的手机号信息,其中 参数:authToken和encryptedData均 ...

  4. iOS开发最新最全微信第三方登录接入流程

    前言: [1] iOS 微信登录注意事项 1.目前移动应用上微信登录只提供原生的登录方式,需要用户安装微信客户端才能配合使用.2.对于Android应用,建议总是显示微信登录按钮,当用户手机没有安装微 ...

  5. 数据库用户表结构设计-多种注册方式含第三方登录

    传统互联网已经过渡到移动互联网的时代,我们在开发android.ios.小程序等的时候,客户端的注册方式已经非常的丰富多样.所以,后台的用户表的设计也需要适应不同注册方式「不断扩张」及「相互绑定」的情 ...

  6. 深入浅出用户认证鉴权---使用非对称加密算法加密登录

    深入浅出用户认证鉴权 使用非对称加密算法加密登录 面临的问题 明文密码登录 MD5/BASE64 加密登录 解决方案 对称加密与非对称加密 对称加密 非对称加密 在登录过程中的使用 使用非对称加密算法 ...

  7. openstack登录认证出现错误_无法登录的用户 | 一次问题排查过程

    点击上方"蓝字"关注我们 0 "有用户在手机端认证失败." ins项目的微信群里的客户又遇到了新的问题. "不像是网络问题,感觉是后端服务的问题.&q ...

  8. 2022最新微信小程序授权登录(前后端分离)

    一.前言 首先说一下微信小程序最近两个比较大的变动: 1. 获取用户信息接口由原来的wx.getUserInfo更换为wx.getUserProfile 2021年4月28日24时后发布的新版本小程序 ...

  9. php 单用户登录,Linux 系统的单用户模式、修复模式、跨控制台登录在系统修复中的运用...

    一.单用户模式: 单用户模式要求我们输入root用户的密码,否则您无法登录单用户模式:如果您丢失了root用户的密码,并不能用单用户模式来重设您的root密码: 另外单用户模式还有一个前提是您的gru ...

  10. 系统安全及应用(账户安全控制,系统引导和登录,弱口令检测和登录控制,PAM认证,端口扫描,用户切换和提权)

    文章目录 系统安全及应用 账户安全控制 基本安全措施 chattr--锁定账号配置文件 密码安全控制( chage) 要求用户下次登录时修改密码 命令历史,自动注销 注销时自动清空命令历史: bash ...

最新文章

  1. jvm两种方式获取对象所占用的内存
  2. elment-ui 表格进行实时百分比计算
  3. 成功解决KeyError: “Passing list-likes to .loc or [] with any missing labels is no longer supported. The
  4. Make Even(800)
  5. OpenCV转换PyTorch分类模型并使用OpenCV Python启动
  6. VulnHub靶机系列:Os-ByteSec
  7. hadoop--HDFS_机架感知与网络拓扑节点距离计算
  8. 第三次实验及动手动脑
  9. HDU2006 求奇数的乘积【入门+序列处理】
  10. IPSec Over GRE和GRE Over IPSec技术
  11. Atitit 深入理解软件的本质 attilax总结 软件三原则三次原则是DRY原则和YAGNI原则的折
  12. matlab prn文件,教你妙用PRN文件 实现文档的换机打印
  13. etc fstab 详解linux,/etc/fstab文件详解
  14. 关于谷歌的一个简单工具以及chrome浏览器更新方法
  15. 罗技craft写java怎么样_评测| 入手罗技CRAFT无线键盘后才知道什么叫奢华
  16. 安装mysql详细教程(windows 10安装mysql详细教程新手必看)
  17. 2021年中式烹调师(初级)模拟考试系统及中式烹调师(初级)实操考试视频
  18. libopencv_viz.so未定义使用
  19. 智掌柜带你了解餐饮点菜系统的功能,快来看看吧~
  20. Windows下载安装Redis

热门文章

  1. 手机里的照片导入计算机的方法,如何把iphone照片导入电脑 四种方法分享【图文】...
  2. X-Cash空投领取教程
  3. 轻轻松松实现本地和云主机之间的文件上传下载
  4. 当面试问到自己有哪些缺点应该怎么回答
  5. 解决IE禁止第三方Cookie
  6. winform datagridview控件设置列标题字体大小无效问题
  7. C语言怎样判断乘法越界,如何判断C语言算术运算的越界问题
  8. python安装方法32位_python安装教程
  9. 短视频高流量的秘诀,上热门全靠这些技巧
  10. testin云测操作步骤