关于redis实现单点登录的一点思路

本文介绍了单点登录(SSO)的基本概念与实现流程。通过使用Redis存储令牌(token)并结合浏览器Cookie,使得用户在不同子应用间无需重复登录。同时,文章详细解释了如何通过删除特定令牌来实现同步登出功能。

先简单说一下单点登录

把登录的部分单独拿出来作为一个项目,专门用来登录。

当我想访问某个子项目或者模块的时候,会先请求登录的部分,如果登录过了,就不需要再登录了。

这个和单独项目时,把userId放到session中道理是一样的

因为多个子项目在不同的tomcat无法实现session共享,这时我们可以利用cookie


多说几句关于cookie和session的区别

cookie是针对于浏览器的,session是针对服务器的。

cookie的产生会有JSessionId,也就是session的唯一凭证。

cookie是当前浏览器对该父域名用作数据共享和记录的。

session是在服务器上开辟了一块内存,用于当前session(同一JSessionId)用户的数据共享。

关于cookie和session的区别只是个人理解,有不同的看法可以提,多交流。


说一下流程:

用户在一个模块登录,会进到登录系统,先验证你的用户名和密码是否正确,如果正确。

会产生一个唯一票据,我们这里叫他token,把这个token放到redis中,存放方式是这样的。

redis.put(token,userId);//存储一条对应用户信息的token

redis,put("your setting",token);//再存储一条对应userId的唯一标识,your setting可以写成loginSys+userId

为什么要这么存,正常的思路是只存上面一条就行了,稍后解答。


我们把token返回,response.addCookie(new Cookie("my cookie",token));//这里的my cookie可以写成loingSysCookie

流程实现是这样的,需要设置过期时间等等参数,这里就不写了。


这时候只要是同一浏览器,就会带着这个cookie,访问该项目下的子项目(父级域名下的子级域名,比如www.baidu.com和mp3.baidu.com的关系),

进入登录系统,拿到token,进到redis中比对,是否有用户就可以了,如果有,就不需要再登录了。

下面说一下上面的疑问:

当我再一次登录系统的时候,先去找redis中的redis,get("your setting")是否为空,已经在别处登录过的用户,可以取到他的token,

redis.del(token),这样就实现了单点登录,同步登出。

之后再设置redis和cookie,方法同上。


很多没有redis中放第二条,就无法实现单点登录同步登出,虽然设置了过期时间,但用户体验和安全性还是差一点。






评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烤鸭的世界我们不懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值