SSO后期补充理解
sso系统的提出:
为什么会产生sso系统呢?它的作用是什么?这跟普通的登录系统有什么区别?
我们先来说说session的实现原理:session跟cookie都是用户的会话跟踪技术,为什么登录成功后,信息写入session,下次就知道是该用户呢?原理是什么?
其实session的原理:当我们登录成功后,将用户的信息写入session,这时候会自动产生一个sessionId,而这个sessionId保存在客户端的cookie中,所以访问的时候先从cookie中读取sessionId,然后根据id到服务端查询用户的session信息,这样就查找到了对应的用户。
那么sso系统的提出与session有什么渊源呢?
sso系统的提出其实就是因为session的共享问题引出的,我们知道session的信息是存储在服务端的,比如我们服务器使用的tomcat,那么我们的session就存储在服务端,可是现在的系统是分布式的系统,每个独立的系统都有一个独立的tomcat,那么每个session对应每个tomcat,但是这些工程是逻辑上统一,物理上独立。那么为了支撑起这整个系统,必须如果session共享,那么每个系统都有独立的session,用户登录一个session后,其他的工程都不知道,都需要再次登录。这就是session不共享导致的问题。
那么session存在这个问题,难道他们不会自己想办法解决吗?的确,他们提出了一个方案,就是将session在个tomcat中复制,也就是说10个tomcat需要复制10次,那么100呢,复制100次,再多呢,可见效率是多么的低?所以接着又提出了一个新的方案:sso
利用sso来实现这个session共享的问题。
那么,到底sso是如何来实现这个session共享呢?为什么分布式系统,为什么用户在这个工程登录了,其他工程也知道了这个消息,就出现了一次登录,其他系统免登录呢。
后面博客我们有写到sso的实现session共享的几种方案:
这里我们看下本次商城项目是如何实现的:
首先看下分布式系统的架构:

那么我们具体是如何实现这个sso系统呢,流程图如何,原理如何?接下来分享:

其实关键点就是这个token,通过cookie的共享域,共享了token,也就实现了session的共享。
那么其他系统如何来查询调用这个系统呢,这里使用了拦截器的作用,对用户进行拦截验证放行。


其实redis中存储的是token和用户信息,token存在则用户存在,token不存在,则用户不存在。

其实这就是sso系统的登录原理:
cookie顶级域共享,整个系统共享cookie,将token写入cookie,也就是实现了token共享

登录成功后的token写入redis,并设置过期时间。
然后其他系统访问的时候,根据cookie中的token调用sso服务即可进行验证用户是否登录。
这里客户端调用sso的时候还用的jsonp跨域:

这样就是实现了一次登录,各个系统免登录。
SSO后期补充理解的更多相关文章
- session问题总既然(深入理解)&Token问题理解&sso单点登陆理解实现
一.Session使http协议成为有状态协议(浏览器cookie本地这个session,服务器端也有这个session) 1.ajax前端登陆无法保存session,造成无法维持登陆状态(http本 ...
- 云笔记项目-MyBatis返回自增类型&堆栈对象补充理解
在云笔记项目中,讲到了MySql的自增,MyBatis查询到自增类型数据后可以设置返回到参数属性,其中学习了MySql的自增写法,堆栈对象等知识. MySql数据类型自增 建立一张Person表,其中 ...
- JWT、OAUTH2与SSO资料补充
JWT: 阮一峰:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html https://blog.csdn.net/q ...
- Guava 的EventBus示例代码(简单笔记,后期补充)
package guavademo.event.bus; import com.google.common.eventbus.EventBus; import com.google.common.ev ...
- python 异常类型----后期需理解调整
1.Python内建异常体系结构The class hierarchy for built-in exceptions is: BaseException +-- SystemExit +-- Key ...
- Linux 虚拟内存和物理内存的理解(转)
在学习内核之前,因为虚拟内存的关系看过这篇文章,但是有的地方不是很懂. 现在对内核学习一段时间后,感觉这篇博客不错. 虚拟内存: 第一层理解 1.每个进程都有自己独立的4G内存空间,各个进程的内存空间 ...
- 【转】Linux 虚拟内存和物理内存的理解
http://www.cnblogs.com/dyllove98/archive/2013/06/12/3132940.html 首先,让我们看下虚拟内存: 第一层理解 1. 每个进程 ...
- Linux 虚拟内存和物理内存的理解
关于Linux 虚拟内存和物理内存的理解. 首先,让我们看下虚拟内存: 第一层理解 1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 2. 一个新进程建立的时候,将会建立起自 ...
- Linux 虚拟内存和物理内存的理解【转】
转自:http://www.cnblogs.com/dyllove98/archive/2013/06/12/3132940.html 首先,让我们看下虚拟内存: 第一层理解 1. 每 ...
随机推荐
- Node.js 下载路径/微软产品下载路径
https://nodejs.org/en/ https://www.microsoft.com/en-us/download //微软官方下载地址,可以下载VS2015 SQL 等 微软产品
- MFC Timer定时器
知识点: 定时器Timer 创建定时器 销毁定时器 代码测试 一. 创建定时器 UINT SetTimer( HWND hWnd, // 指定关联定时器的窗口句柄,在MFC版将省略此参数 UINT n ...
- BYTE数组与16进制字符串互转
//字节数组转换为HEX 字符串const string Byte2HexString(const unsigned char* input, const int datasize) { ]; ; j ...
- python 网络爬虫requests模块
一.requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效. 1.1 模块介绍及请求过程 requests模块模 ...
- python删除文件与目录的方法
python内置方法删除目录(空目录与非空目录)及文件 1.os.remove(file_path):删除文件 #PPTV是文件夹,xen.txt是文件 >>> os.remove( ...
- 把Excel的数据导入到数据库
将Excel作为数据源,将数据导入数据库,是SSIS的一个简单的应用,下图是示例Excel,数据列是code和name 第一部分,Excel中的数据类型是数值类型 1,使用SSDT创建一个packag ...
- 浅谈我的UI设计之路
时光匆匆,进入UI学习已经快两个月了,这段时间过得很充实,因为有压力才有收获. 还记的刚刚学习手绘的时候,对于这个行业只有一个初步的认识,知道自己喜欢,但是真正学习的时候才发现,我要学习的东西还有很多 ...
- CSAPP lab2 二进制拆弹 binary bombs phase_1
这个实验从开始到完成大概花了三天的时间,由于我们还没有学习编译原理.汇编语言等课程,为了完成这个实验我投机取巧了太多,看了网上很多的解题方法,为了更加深入学习编译反编译,觉得需要从头开始好好梳理一下. ...
- 20135202闫佳歆--week4 系统调用(上)--学习笔记
此为个人笔记存档 week 4 系统调用(上) 一.用户态.内核态和中断处理过程 用户通过库函数与系统调用联系起来. 1.内核态 在高执行级别下,代码可以执行特权指令,访问任意的物理地址. 2.用户态 ...
- Beta阶段冲刺-1
1. 新成员 新加入成员,克克飞同学,任务是去弄公众号相关的部分. 队员 个人简介 博客地址 杨晨露 每天都在开会的PM http://www.cnblogs.com/ycll/ 游舒婷 每天都在装死 ...