最近在做一个功能,要求是这样的:相同的账号,例如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. [Offer收割]编程练习赛63
  2. 视频编解码学习之二:编解码框架
  3. 《CLR via C#》读书笔记 之 参数
  4. java学习(123):treeset排序集合
  5. 做手游的计算机配置要求,原神pc配置要求高吗 最低什么配置能流畅运行​
  6. Android开发指南(32) —— Multimedia and Camera - Audio Capture
  7. 《疯狂的站长》读后感1
  8. 华为服务器开机启动项怎么设置_华为服务器怎么设置u盘启动
  9. 2019年的读书印记
  10. Nginx优化---防盗链--网页缓存--网页压缩--日志分割
  11. 重启该计算机 选择操作系统,电脑为什么会自动重启 电脑经常自动重启修复方法...
  12. 人机智能的逻辑哲学论
  13. 图片中不规则区域的点击
  14. 计算机毕业设计ssm校园招聘管理系统968b0系统+程序+源码+lw+远程部署
  15. JSD-2204-酷莎商城(后端)-Day17,18
  16. 金融IT系统高可用运维经验总结—人员、技术、流程
  17. GEE遍历影像中每个像元的值
  18. docker单主机网络
  19. 逻辑学学习.6--- 命题逻辑(四):推演的简单规则
  20. 中国电信天翼物联加入开源鸿蒙社区

热门文章

  1. Laya Air游戏开发模式之MVC模式(核心篇)
  2. 科技热点周刊|马斯克套现 440 亿;苹果推出数字身份证;Meta 与微软合作;华为捐赠欧拉
  3. 关于对接海康威视综合安防平台并使用SDK下载过车视频
  4. 900 Sentences
  5. 王子与公主的爱情故事新结局
  6. javascript内置函数是什么
  7. c语言怎么写tg的反函数,关于y=x对称的两个函数表达式有什么特点 改怎么写 比如对数函数...
  8. 入手佳能24-70mm f/2.8L
  9. 祝福我的家人朋友永远平安健康
  10. XMind2020介绍、下载