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后期补充理解的更多相关文章

  1. session问题总既然(深入理解)&Token问题理解&sso单点登陆理解实现

    一.Session使http协议成为有状态协议(浏览器cookie本地这个session,服务器端也有这个session) 1.ajax前端登陆无法保存session,造成无法维持登陆状态(http本 ...

  2. 云笔记项目-MyBatis返回自增类型&堆栈对象补充理解

    在云笔记项目中,讲到了MySql的自增,MyBatis查询到自增类型数据后可以设置返回到参数属性,其中学习了MySql的自增写法,堆栈对象等知识. MySql数据类型自增 建立一张Person表,其中 ...

  3. JWT、OAUTH2与SSO资料补充

    JWT: 阮一峰:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html https://blog.csdn.net/q ...

  4. Guava 的EventBus示例代码(简单笔记,后期补充)

    package guavademo.event.bus; import com.google.common.eventbus.EventBus; import com.google.common.ev ...

  5. python 异常类型----后期需理解调整

    1.Python内建异常体系结构The class hierarchy for built-in exceptions is: BaseException +-- SystemExit +-- Key ...

  6. Linux 虚拟内存和物理内存的理解(转)

    在学习内核之前,因为虚拟内存的关系看过这篇文章,但是有的地方不是很懂. 现在对内核学习一段时间后,感觉这篇博客不错. 虚拟内存: 第一层理解 1.每个进程都有自己独立的4G内存空间,各个进程的内存空间 ...

  7. 【转】Linux 虚拟内存和物理内存的理解

    http://www.cnblogs.com/dyllove98/archive/2013/06/12/3132940.html 首先,让我们看下虚拟内存: 第一层理解 1.         每个进程 ...

  8. Linux 虚拟内存和物理内存的理解

    关于Linux 虚拟内存和物理内存的理解. 首先,让我们看下虚拟内存: 第一层理解 1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 2. 一个新进程建立的时候,将会建立起自 ...

  9. Linux 虚拟内存和物理内存的理解【转】

    转自:http://www.cnblogs.com/dyllove98/archive/2013/06/12/3132940.html 首先,让我们看下虚拟内存: 第一层理解 1.         每 ...

随机推荐

  1. Hadoop日记Day9---HDFS的java访问接口

    一.搭建Hadoop 开发环境 我们在工作中写完的各种代码是在服务器中运行的,HDFS 的操作代码也不例外.在开发阶段,我们使用windows 下的eclipse 作为开发环境,访问运行在虚拟机中的H ...

  2. C#集合与泛型集合

    看到这个标题,大家应该就知道有泛型集合,就有非泛型集合 既然都是集合,咱们今儿就简单的来对比讲解下 需要记住的不算太多,理解记忆.理解记忆 2017-11-0411:39:09 C# 泛型集合之非泛型 ...

  3. svn插件下载的两种方式

     1.下载SVN插件     SVN插件下载地址及更新地址,你根据需要选择你需要的版本.现在最新是1.8.x  Links for 1.8.x Release:          Eclipse up ...

  4. SpringBoot日记——MQ消息队列整合(二)

    基于第一篇文章搭建好环境以后,我们这篇文章继续介绍如何在springboot中使用RabbitMQ. 1).单播:添加好pom文件和自定义配置后,来看: @Autowired RabbitTempla ...

  5. 如何用istio实现请求超时管理

    前言 在前面的文章中,大家都已经熟悉了Istio的故障注入和流量迁移.这两个方面的功能都是Istio流量治理的一部分.今天将继续带大家了解Istio的另一项功能,关于请求超时的管理. 首先我们可以通过 ...

  6. docker-compose编排

    创建并启动容器 docker-compose up -d 备注: -d 后台启动并运行容器 前提是你在执行该命令的时候已经编写好了docker-compose.yml文件,在这个文件的当前目录执行上述 ...

  7. Katalon Studio学习笔记(二)——请求响应中文乱码解决方法

    Katalon Studio接口测试发现返回的中文消息是乱码,这是因为KS的编码格式是UTF-8,因此导致中文字体出现乱码.如下图所示: 在我们的系统中添加一个名字为JAVA_TOOL_OPTIONS ...

  8. RPG游戏开发基础教程

    RPG游戏开发基础教程 第一步 下载RPG Maker 开发工具包 1.RPG Maker 是什么? RPG Maker 是由Enterbrain公司推出的RPG制作工具. 中文译名为RPG制作大师. ...

  9. Windows7下Java运行时环境搭建

    第一步:下载JDK 地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html,(由于Sun于2009年被oracle收 ...

  10. 编码用命令执行的C语言词语统计程序

    需求介绍 程序处理用户需求的模式为: wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 -c   ...