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

基础知识:
 
session原理(存放在在服务器端,每次请求会重置时间)
 
    当客户端发送一个请求的时候服务器端会判断是否有一个名为jsesion的cookie
    如果没有,服务端就会创建一个名为jsession的cookie,cookie的值为uuid,同时会创建一个uuid为key的session被创建出来,同时会把名为jsession的cookie返回到客户端
    如果客户端存在cookie且没有超时,再次请求的时候就直接会将名为jsession的cookie返回到请求头中
 
cookie原理(存放在客户端,每次请求不会重置时间)
 
           在服务器端实例化cookie对象只能存字符串。
           设置cookie的有限时间以及作用域和有效路径
           跟随响应对象响应给客户端
           浏览器接收带cookie之后,会对其进行io操作存放到本地的某个文件夹中、
           当用户再次发请求的时候 只要能获取某个或者某些cookie,浏览器就会自动发送到客户端
 
单点登录( SingleSignOn,SSO): 
 
客户在一个项目中登录之后其他与之有关联的项目就不需要再进行重复登录
 
 
先上图:
 
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校验成功并通知服务端该客户一登录,可以进行下一步操作
 
    

猜你喜欢

转载自blog.csdn.net/weixin_43562937/article/details/106698175