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. 每 ...
随机推荐
- JavaEE笔记(十三)
#单一职责原则 一个类只做一件事 #开闭原则 拓展开,修改源码闭 #动态代理 1 基于接口的方式 jdk的动动代理2 基于类的方式 cglib的代理 #SSH整合 1.spring(容器) 1& ...
- CS229笔记:分类与逻辑回归
逻辑回归 对于一个二分类(binary classification)问题,\(y \in \left\{0, 1\right\}\),如果直接用线性回归去预测,结果显然是非常不准确的,所以我们采用一 ...
- 使用 restTemplate 实现get/post 请求
get 请求(这里是在 idea 的 test包中,所以需要直接 new RestTemplate() ) 即:RestTemplate restTemplate = new RestTemplate ...
- Wannafly挑战赛26-F-msc的棋盘[最小割转化dp]
题意 一个大小为 \(n*m\) 的棋盘,知道每一列放了多少棋子,求有多少摆放方案满足要求. \(n,m\leq 50\) . 分析 如果是求是否有方案的话可以考虑网络流,行列连边,列容量为 \(b_ ...
- OpenGL:使用顶点数组法绘制正六面体
在今天的opengl的课程以及实验中,我们学习了如何使用顶点数组的方法来绘制图形,但相信还有很多同学对它的实际使用方法不太了解,我们就用我们今天实验课上的实例来简单讲解一下 题目及要求 绘制一个正六面 ...
- eclipse中设置项目的编码方式
1.windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右侧Text file encoding ...
- PAT甲题题解-1104. Sum of Number Segments (20)-(水题)
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...
- 重温jsp③
Jsp详细 九大内置对象 Out jsp的输出流,用来向客户端响应 page 当前jsp对象!他的引用类型是object,即真身中有如下代码:object page=this: Session h ...
- Day Three
站立式会议 站立式会议内容总结 442 今天:从本地导入电子书页面编写以及部分逻辑代码 遇到的问题:界面适配问题 明天:具体计划界面的编写,解决上面问题 331 今天:监听webview滑动底端事件 ...
- beta4
吴晓晖(组长) 过去两天完成了哪些任务 昨天FloatingActionButton和权限获取调整 今天复习,没写东西,晚点有空了写 展示GitHub当日代码/文档签入记录 接下来的计划 推荐算法 还 ...