首先是单点登录的基本原理理解,此处可看这篇文章,写得很浅显易懂:

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

大家都知道在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,直接就登录成功了。

整个单点登录的流程图解可参考下图(参考自 的图解)

java怎么得到session的值 java通过session登录的原理_java怎么得到session的值

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