单点登录的三种常用实现方式

基础知识:

单点登录:
在微服务或者分布式情况下,我们的服务器不止一个需要用户在一个JVM上执行登录逻辑以后,其他的服务器JVM都认可已经登录的身份,这就是--->单点登录。

session原理(存放在在服务器端,每次请求会重置时间)

当客户端发送一个请求的时候服务器端会判断是否有一个名为jsesion的cookie
如果没有,服务端就会创建一个名为jsession的cookie,cookie的值为uuid,同时会创建一个uuid为key的session被创建出来,同时会把名为jsession的cookie返回到客户端
如果客户端存在cookie且没有超时,再次请求的时候就直接会将名为jsession的cookie返回到请求头中.

cookie原理(存放在客户端,每次请求不会重置时间)
客户在一个项目中登录之后其他与之有关联的项目就不需要再进行重复登录

1.利用session广播机制实现

参与集群的每个节点的Session状态都被复制到集群中的其他所有节点上,无论何时,只要Session发生改变,Session数据都要重新被复制
Tomcat、JBoss、was都提供了这样的功能,其中Tomcat采用集群节点广播复制,JBoss采用配对复制机制
优点:每个节点都复制一份Session,一个节点出现问题时其它节点可以接替它的工作
缺点:节点间进行Session同步会占据不少系统资源,整体性能随着集群节点数的增加而急剧下降

2.使用cookie+redis实现

(1)客户端第一次登陆时,通过服务端产生cookie和一个与之对相应的session
(2)将第一次登录产生的cookie和User对象(登录所需信息),以key-value的形式存储在Redis中
(3)当客户端再次访问另外需要登录操作的页面时,将该客户端的cookie拿到Redis中进行比对,如果存在,则视为已登录
(4)因为session是存在有效期的,所以可以在Redis中设置与之对相应的有效时间

3.使用token实现

(1)构SSO服务站点
(2)客户端第一次登录时在SSO站点获取登陆凭证
(3)客户端拿着登陆凭证去服务端登录
(4)服务端拿着客户端的登陆凭证去寻找SSO服务站点进行校验
(5)SSO校验成功并通知服务端该客户一登录,可以进行下一步操作

posted @ 2021-09-27 20:40  半边星  阅读(3362)  评论(0编辑  收藏  举报