单点登录(java)
sso-client
- 拦截子系统未登录用户请求,跳转至sso认证中心
- 接收并存储sso认证中心发送的令牌
- 与sso-server通信,校验令牌的有效性
- 建立局部会话
- 拦截用户注销请求,向sso认证中心发送注销请求
- 接收sso认证中心发出的注销请求,销毁局部会话
sso-server
- 验证用户的登录信息
- 创建全局会话
- 创建授权令牌
- 与sso-client通信发送令牌
- 校验sso-client令牌有效性
- 系统注册
- 接收sso-client注销请求,注销所有会话
接下来,我们按照原理来一步步实现sso吧!
1、sso-client拦截未登录请求
java拦截请求的方式有servlet、filter、listener三种方式,我们采用filter。在sso-client中新建LoginFilter.java类并实现Filter接口,在doFilter()方法中加入对未登录用户的拦截
1 2 3 4 5 6 7 8 9 10 11 12 |
|
2、sso-server拦截未登录请求
拦截从sso-client跳转至sso认证中心的未登录请求,跳转至登录页面,这个过程与sso-client完全一样
3、sso-server验证用户登录信息
用户在登录页面输入用户名密码,请求登录,sso认证中心校验用户信息,校验成功,将会话状态标记为“已登录”
1 2 3 4 5 6 |
|
4、sso-server创建授权令牌
授权令牌是一串随机字符,以什么样的方式生成都没有关系,只要不重复、不易伪造即可,下面是一个例子
1 |
|
5、sso-client取得令牌并校验
sso认证中心登录后,跳转回子系统并附上令牌,子系统(sso-client)取得令牌,然后去sso认证中心校验,在LoginFilter.java的doFilter()中添加几行
1 2 3 4 5 6 7 8 9 10 11 |
|
verify()方法使用httpClient实现,这里仅简略介绍,httpClient详细使用方法请参考官方文档
1 2 |
|
6、sso-server接收并处理校验令牌请求
用户在sso认证中心登录成功后,sso-server创建授权令牌并存储该令牌,所以,sso-server对令牌的校验就是去查找这个令牌是否存在以及是否过期,令牌校验成功后sso-server将发送校验请求的系统注册到sso认证中心(就是存储起来的意思)
令牌与注册系统地址通常存储在key-value数据库(如redis)中,redis可以为key设置有效时间也就是令牌的有效期。redis运行在内存中,速度非常快,正好sso-server不需要持久化任何数据。
令牌与注册系统地址可以用下图描述的结构存储在redis中,可能你会问,为什么要存储这些系统的地址?如果不存储,注销的时候就麻烦了,用户向sso认证中心提交注销请求,sso认证中心注销全局会话,但不知道哪些系统用此全局会话建立了自己的局部会话,也不知道要向哪些子系统发送注销请求注销局部会话
7、sso-client校验令牌成功创建局部会话
令牌校验成功后,sso-client将当前局部会话标记为“已登录”,修改LoginFilter.java,添加几行
1 2 3 |
|
sso-client还需将当前会话id与令牌绑定,表示这个会话的登录状态与令牌相关,此关系可以用java的hashmap保存,保存的数据用来处理sso认证中心发来的注销请求
8、注销过程
用户向子系统发送带有“logout”参数的请求(注销请求),sso-client拦截器拦截该请求,向sso认证中心发起注销请求
1 2 3 4 |
|
sso认证中心也用同样的方式识别出sso-client的请求是注销请求(带有“logout”参数),sso认证中心注销全局会话
1 2 3 4 5 6 7 8 |
|
sso认证中心有一个全局会话的监听器,一旦全局会话注销,将通知所有注册系统注销
1 2 3 4 5 6 7 8 |
|
come from:单点登录原理与简单实现 - ywlaker - 博客园 (cnblogs.com)
单点登录(java)相关推荐
- SSO 单点登录(java)
1.1 创建客户端 / 认证服务器 使用Spring Initializr 初始化springBoot项目. 添加基本依赖 1.2 编排配置 properties Client1 客户端配置 Clie ...
- ad 单点登录 java 访问权限_AD 单点登录以及windows认证详细说明
上篇博客我谈到了一些关于ASP.NET Forms身份认证方面的话题,这次的博客将主要介绍ASP.NET Windows身份认证. Forms身份认证虽然使用广泛,不过,如果是在 Windows Ac ...
- ad 单点登录 java 访问权限_如何配置Portal 基于AD的单点登录配置
Portal for ArcGIS支持两种类型的账户,分别是: 1.系统内置账户. 2.外部系统的企业账户. 这两种不同的账号分别支持多种身份认证方式: 账号类型 认证方式 细分认证方式 系统内置账号 ...
- php 单点登录实现代码,PHP简单实现单点登录功能示例
1.准备两个虚拟域名 127.0.0.1 www.openpoor.com 127.0.0.1 www.myspace.com 2.在openpoor的根目录下创建以下文件 index.PHP 1 ...
- java php 单点登陆,cas实现单点登录,登出(java跟php客户端)(转)
cas实现单点登录,登出(java跟php客户端)(转)cas实现单点登录,登出(java和php客户端) (转) 最近项目中需要做单点登录,客户端包含java和php,java有几个应用程序,php ...
- JAVA springboot ssm b2b2c多用户商城系统源码-SSO单点登录之OAuth2.0登录流程(2)
上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的 ...
- python 单点登录_清华园计算机系联合推出的Java+Python视频曝光
Java 和 Python 双方都有各自适合和发展的领域,所以别人常问我学习什么语言好,或者让我在两种语言进行比较好坏. 其实编程语言只有适不适合你个人去学,并不存在好坏,每种语言的存在即是合理的,你 ...
- JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案
问题分析 通过HttpClient获取网页数据源,通过Jsoup解析数据.先模拟登录统一身份认证平台,再通过单点登录方式登录正方教务系统,最后获取相关信息.模拟浏览器正常操作,封装请求头信息获取SES ...
- C# ASP.NET程序员整合Java门户单点登录PHPwind论坛博客软件集成项目经验总结
为什么80%的码农都做不了架构师?>>> 有人曾问,如何正确估算项目周期?你是天天写C#程序的程序员,若做了一个 PHPwind 的单点登录,那估计需要几天时间? 客户只提了一 ...
- java heroku_使用Spring Boot和Heroku在20分钟内完成Java的单点登录
java heroku 建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现. 注册 ,再也不 ...
最新文章
- 编者序:初衷、计划、要求、优势、目标和展望
- 传统企业应用转型--从0到1的微服务之路
- JSP+Servlet+Ajax实现用户增删改查的例子
- java实现对HDFS增删改查(CRUD)等操作
- VTK:图表之TreeToMutableDirectedGraph
- JavaFX UI控件教程(五)之Radio Button
- ASP.NET 2.0 中动态添加 GridView 模板列
- c++ 常用字符串封装函数
- SAP License:SAP Business One 与SAP R/3的区别
- python创意小作品-[专题]在Python教学中应用turtle创意编程实践
- linux-32bit-内存管理
- Greedy Mouse 贪心的耗子 nyoj824(贪心算法)
- centos7 搭建安装zabbix3.0邮件告警实例(二)
- 《Frustum PointNets for 3D Object Detection from RGB-D Data》论文及代码学习(二)——代码部分
- jquery进度条_jQuery进度栏
- 第一届腾讯社交广告高校算法大赛经验分享
- springboot:运行(部署)时出现WebServerException: Unable to create tempDir.
- for what? so what?
- 用C 制作含万年历的台历(2009年样张)之1
- 每天10个前端小知识(1day)