基于SpringBoot实现简易的单点登录系统(提供gitee源码)
前言:
最近的工作与学习中接触到需要开发一个单点登录的功能模块,在搜集网上的一些不错的文章写的一份简易的总结,简述了单点登录的实现思路和原理,最后我也提供了一个写的非常简易的单点登录的springboot项目,仅用作学习分享。
目录
一、什么是单点登录(SSO)
二、单点登录的原理
三、单点登录的实现方案
(一)、通过Cookie+Session实现单点登录
(二)、通过Session共享实现单点登录
(三)、通过Token实现单点登录
四、gitee项目简介
(一)、源码地址
(二)、项目简介
(三)、项目整体结构
(四)、操作过程
一、什么是单点登录(SSO)
单点登录的英文名全称叫做:Single Sign On,简称SSO,是指在同一个账号平台下的多个子系统中,用户只需要登录一次,就可以访问其余所有相互的信任的系统,比如支付宝旗下有天猫和淘宝,当我登陆了淘宝以后,天猫也会同步进行登录,就不需要们再一个个去进行登录操作了,简而言之便是,多个互相信任的子系统同步登陆。
二、单点登录的原理
SSO有单独的一个认证中心,所有的子系统都是通过这个认证中心的登录入口进行登录的,登录的时候会附带自己的URL,首先SSO认证中心会验证客户的账号和密码是否正确,之后会创建全局绘画以及Token,Token会发放给每个子系统,当子系统拿到了Token,便有了授权,就可以创建客户与该子系统的局部会话。
三、单点登录的实现方案
这里我主要归纳了三种方案进行了大概的简述。
(一)、通过Cookie+Session实现单点登录
使用Cookie作为存放客户的凭据,当客户登录成功后,SSO会返回一个加密的Cookie,当用户访问子系统时候会携带上这个Cookie进行访问受保护的资源,当客户在访问子系统时候,先拿到对于子系统的Cookie,再从Redis中查询Cookie是否存在,不存在则重定向到登录页面,存在则正常执行程序,实现单点登录。
Redis是一个键值对(Key,Value)存放客户信息,Key:ID,Value:用户数据,例如姓名,密码和身份证等等
Cookie:把Redis生成的Key存入Cookie当中
步骤概述:
1、客户访问系统1中受保护的资源,系统1发现客户还未登录,跳转到SSO认证中心,并将自己的地址作为参数
2、SSO认证中心发现客户还没登录,将客户引导至登录界面
3、客户输入账号和密码申请登录
4、SSO认证中心校验用户信息,比对通过则与客户创建与SSO认证中心之间的会话,称之为全局会话,同时创建授权令牌。
5、SSO认证中心带着令牌跳转回系统1的请求地址
6、系统1拿到令牌,去SSO认证中心校验令牌是否有效
7、SSO认证中心校验令牌,结果有效,则注册系统1
8、系统1使用该令牌和客户创建局部绘画,返回受保护的资源
注意如下6点:
1、客户与SSO认证中心建立的会话称为全局会话
2、客户与子系统创建的会话称为局部会话
3、局部会话存在,则全局会话一定存在
4、全局会话存在,则局部会话不一定存在
5、全局会话销毁,则局部会话一定销毁
6、相同的域的Cookie可以进行共享,例如ww.abc.com和www.efd.com可以访问xxx.com的Cookie,但ww.abc.com和www.efd.com是不能互相访问的
(二)、通过Session共享实现单点登录
1、客户第一次登录成功时候,将会话信息(用户ID和数据)写入共享Session
2、客户再次登录时,获取共享Session,判断是否有会话信息,如果没用则跳转到登录页面
3、存入会话,设置会话持久时间,超过固定时间后自动超时
(三)、通过Token实现单点登录
1、在通过SSO认证后,按照指定规则生成字符串,把登录之后的用户信息加密到字符串当中,把此字符串进行返回,可以把字符串通过Cookie返回也可以拼接在URL地址上进行返回
2、再次访问其他子系统,在地址栏附带生成的加密字符串,子系统获取加密的字符串,根据加密的字符串获取用户信息,如果没问题就可以访问受保护资源
四、gitee项目简介
(一)、源码地址
https://gitee.com/huang-tuantuan/sso
(二)、项目简介
这里我主要通过Token拼接在URL上面实现的单点登录,整体项目写的非常简易,仅用于提供一个学习思路,对单点登录有个基础的了解。
(三)、项目整体结构
index模块:首页
ekp模块:ekp子系统
oa:oa子系统
login模块:sso登录认证
(四)、操作过程
1、首页
2、点击立即登录,输入账号和密码,点击登录
3、 登录成功后会重定向到首页,token拼接在了URL地址上
4、尝试访问oa子系统和访问ekp子系统,发现已经自动登录
5、再次回到首页,点击退出登录后
6、再次尝试访问oa子系统和ekp子系统 ,发现都已经自动退出登录
以上就是我对单点登录的一些理解与总结!
基于SpringBoot实现简易的单点登录系统(提供gitee源码)相关推荐
- 基于SpringBoot前后端分离的众筹系统(附源码)
基于SpringBoot前后端分离的众筹系统源码下载链接: https://download.csdn.net/download/weixin_47367099/85441573 一.运行步骤 1.环 ...
- 基于 SpringBoot 开发的在线短链生成系统(附源码)
前言 分享一个基于 SpringBoot 开发的在线短链生成系统,在线短链接生成器. 完整项目源码在文章结尾处,大家自行下载即可~ 一.实现功能 1.将长链接转换成短链接,访问短链接时, 302重定向 ...
- 基于Springboot的小型超市商品展销系统 计算机毕设源码01635
摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代. ...
- 推荐一款基于SpringBoot+Vue开发的分布式网盘系统(附源码)
今日推荐 推荐一款开源 Java 版的视频管理系统 推荐3个快速开发平台 前后端都有 项目经验又有着落了 14个项目 正文 大家好,今天,推荐一个网盘系统项目. 上次是谁要的网盘系统项目啊,帮你找到了 ...
- 基于Java实现简易的 注册 + 登录 系统 (中级)
引言 :这个项目我以学习的角度进行补充和完善,力求把登录 + 注册做到最完美!!! 该项目适用于 学习完 基础的编程语法的同学进行进阶学习 [1]基于Java实现简易的 注册 + 登录 系统 非 数据 ...
- 基于JAVA宠物寄存中心计时收费系统计算机毕业设计源码+系统+lw文档+部署
基于JAVA宠物寄存中心计时收费系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA宠物寄存中心计时收费系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...
- 基于JAVA社区老人健康服务跟踪系统计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVA社区老人健康服务跟踪系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA社区老人健康服务跟踪系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B ...
- 基于JAVA江西婺源旅游文化推广系统计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVA江西婺源旅游文化推广系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA江西婺源旅游文化推广系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B ...
- 计算机毕业设计Python+uniapp基于微信小程序某企业考勤系统(小程序+源码+LW)
计算机毕业设计Python+uniapp基于微信小程序某企业考勤系统(小程序+源码+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ ...
- 基于java奥利给共享自习室系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java奥利给共享自习室系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java奥利给共享自习室系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技 ...
最新文章
- JavaScript类的问题
- android获取图片缩略图,Android系获取图片和视频的缩略图
- 一起谈.NET技术,linq2sql:直接执行sql语句
- [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子
- mysql创建唯一索引_mysql创建唯一索引
- 一个传入自定义 user.properties 文件生成 jMeter 执行报表出错的错误消息
- 给SAP云平台的global账号添加Leonardo机器学习服务
- CanFestival移植准备工作
- 仅30分钟,在同一台设备安装discourse和wordpress
- 使用nodejs进行WEB开发
- Kali Linux 网络扫描秘籍 第二章 探索扫描(一)
- 退出android app时界面残留影响,【Android】App 或 Activity 销毁重建的状态恢复对回调带来的影响...
- 欧洲英语语言c1证书,威尼斯大学认可的英语语言证书
- 中海达数据怎么转rinex_Ashtech格式转换RINEX
- 编译lua5.3.2报错提示libreadline.so存在未定义的引用解决方法
- VS生产dll把双目追踪四个圆点计算的物体位姿给unity,在unity中实时变化
- eclipse svn插件安装总失败 每次打开eclipse总提示 subversive svn connectors
- Cocos2d-lua中lua代码加密成luac
- wgc84 笛卡尔_WGS84椭球下的UTM坐标与Clarke80椭球下的兰勃特坐标转换方法研究
- 计算机音乐吧粉刷匠,奥尔夫小班音乐活动:《粉刷匠》