JAVA SSO单点登录原理以及实现方案

首先是单点登录的基本原理理解,此处可看这篇文章,写得很浅显易懂:https://www.cnblogs.com/lexiaofei/p/7172214.html

进入正题,如何真正实现一个系统的单点登录方案呢?

大家都知道在JAVA web中,服务器保持登录状态使用的是session机制,而在客户端如果希望存储某个系统的信息使用的是cookie机制。而SSO WEB的实现方案正是根据这两个来进行实现的。

在一个拥有多个子系统的业务情况下,当用户首次登录到系统A时,检查到用户未登录,此时,程序将会跳转到单点登录系统中进行登录,并且将原本想要跳转的页面当做一个url的一个参数进行暂时存储。接下来便是单点登录的重头戏了:

1.进入登录的controller之后,进行常规的数据校验对比登录信息,对比无误后即登录成功。接着我们将生成一个session,该session对应一个唯一的sessionId,然后我们设置一个token令牌(例如用UUID,他是单点登录的授权令牌),并把token存到redis上。

2.我们将某个固定的key例如“MYSSO_token”+存储到cookie中,value为sessionId,并带上token令牌参数(浏览器发送http请求时会自动携带与该域匹配的cookie,而不是所有cookie,所以key一样也不会产生覆盖)。

3.最后,我们返回所要跳转的原本的url即可。

这就是单点登录第一次进入到系统时所要做的所要操作。

当用户进入系统B时,他如果在系统A上已经登录过了,那么进入登录的controller之后,会进行先读取cookie中的key为“MYSSO_token”的内容,如果value存在,即存在sessionId,然后就能取到值,用户处于登录状态,然后就可以取出相应的用户的用户信息和token令牌啦,然后返回到系统B上,带上token,直接就登录成功了。

整个单点登录的流程图解可参考下图(参考自https://www.cnblogs.com/ywlaker/p/6113927.html 的图解)

这就是整个单点登录的全部内容啦,如果对你有作用点个赞咯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值