同域下单点登录分析 | 单点登录讲解(2)

本项目主要讲解的是单点登录系统的原理及其实现。

相关代码github链接

本章主要讲解的是同域下单点登录分析。



同域下SSO分析与设计

在这里插入图片描述

流程图虽然看着复杂,但大家不要被吓到啦^ _ ^,请大家参照着流程路,听我下面细细道来~~



详细流程分析

项目结构

在github的代码中,我建立了三个项目,分别是服务端SSOServer、客户端SSOClient、以及两个集成了客户端的业务系统app1与aPP2。

在这里插入图片描述


SSO流程分析

将SSOServer,app1,app2启动后,开始SSO流程分析。

1)未登录访问业务系统

未登录访问业务系统app1的index页面:请求被客户端的Filter拦截。

由于没有token,客户端Filter控制其进行登录操作,并将原始的URL作为请求的参数。

在这里插入图片描述


2)用户执行登录操作

进入服务端的UserLoginServlet进行登录操作。进入登录页时,获取URL中的参数——原始的origRUL,将其作为request对象的属性,方便后人获取,并且跳转到服务端的登录页面。

用户提交表单,服务端获取表单中信息后,到数据库中进行查询。若登录失败,则返回原来的登录页面,并携带原来的URL,将原始的URL作为表单的隐藏属性

在这里插入图片描述

若登录成功则:

1.生成token。

2.将token与其对应的user放到全局唯一数据结构中,方便所有人进行获取。

3.给该用户设置一个cookie,值为token,用户在下次访问的时候就会携带此cookie,服务端也就可以通过该cookie对其身份进行验证。

4.判断原始URL是否为空,若不为空则跳转到原始URL页面,否则跳转到成功登录页面。

在用户要跳转到原始URL页面的时候,被客户端的Filter拦截,进行有无token的验证,由于经过登录操作在cookie中已经生成了token,故Filter发送Http通信请求服务端进行token有效性的验证,并将token作为请求参数。

服务端的TokenValidateServlet获取参数中的token后,到全局唯一数据结构中查找有无该token对应的user。若没有,则证明该token可能已经失效或是伪造的,则向客户端返回空字符串,否则返回查询到的user信息。

拦截器接收到服务端的返回信息,若为空字符串则返回原始登录页面,并携带原始URL,否则通过传来的用户信息,对user对象进行还原,方便下个人获取,拦截操作结束,成功进入了业务系统的index页面,并将request对象携带的user信息显示出来。

在这里插入图片描述


3)业务系统增加自己的拦截器

在通过了客户端的拦截器之后,业务系统还可以自定义拦截器,从而根据用户信息获取与本系统相关的用户业务信息,或者是对用户的权限进行进一步的验证,如:"猪猪"不可访问index页面等QAQ。

在这里插入图片描述


4)单点退出

服务端从request对象的cookie中获取token的值,将这个token从全局数据结构中移除,并且将用户保存有该token的cookie设置为无效的。

在这里插入图片描述

关于代码部分,我将会在下一章节中进行详细解释~~~
大家多多关照!^ _ ^


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章