1、首先我们会有三台机器,一个统一认证中心(sso)
,两个系统(crm
、wms
)
2、这个时候我们向crm
系统发起一个请求,第一次访问www.crm.com/employee
,发现本地并没有cookie
,然后在crm
系统中查看下是否有局部会话
,发现也没有,这个时候就需要去统一认证中心
查看是否登录,并且要把当前请求的地址
作为参数
传递给统一认证中心
3、这个时候调用sso.com
中的checkLogin
方法查看是否有全局会话
(如果有则说明已经登录),但是在本地浏览器sso.com
的cookie
中并没有发现cookie
,所有也没有全局会话
,此时需要把url
从地址栏中获取出来,并把这个参数
放入到request
域中,转发到统一认证中心
的登录页面,进行登录
4、转发到统一认证中心
登录页面后,需要把url
放入到登录表单中,因为登录成功之后,需要继续访问上次访问的网址:www.crm.com/employee
5、在统一认证中心
登录页面输入账号和密码,后台登录成功以后,需要创建一个session对象
,并且还要创建令牌token
:session.settribute("token","OSPIKeVNE5fyjV8w");
,并把这个token信息
存储到session对象
中以及后台的数据库
中,方便后续的校验,然后请求响应给浏览器,并把sessionId
以cookie
的形式写入到本地浏览器中,然后重定向到www.crm.com/employee?token=OSPIKeVNE5fyjV8w
,此时请求中带着一个token令牌
6、浏览器重定向到www.crm.com/employee?token=OSPIKeVNE5fyjV8w
,过滤器
拦截到请求,判断是否有局部会话
,发现没有,但是却有token参数
,由于怕人为伪造token参数
,此时需要判断token的有效性
,需要去统一认证中心
判断该token
是否来自于统一认证中心
7、使用HttpURLConnection
发送请求,www.sso.com/employee?token=OSPIKeVNE5fyjV8w
,sso.com
系统获取到token
,然后查询数据库
,查询数据中是否存在该token
,如果存在返回true
,否则返回false
8、如果统一认证中心返回true
,就创建局部会话
,并设置属性isLogin=true
,放行请求,然后返回响应,将sessionId
存储到cookie
中
9、然后第二次访问的时候,请求会把本地的cookie带上(sessionId
),如果在服务器中能找到与之对应的session
,获取isLogin属性
,如果值为true
,则说明有会话,此时就放行请求
10、然后当我们访问wms
系统,第一次访问,本地没有对应的cookie
,服务器也没有局部会话
,然后去统一认证中心
查看是否登录,并且要把当前请求的地址
作为参数
传递给统一认证中心
11、此时在sso.com
服务器中根据JSESSIONID
可以获取到对应的session对象
,说明统一认证中心
已经登录了,然后重定向到wms.com
,并把token带上
12、浏览器重定向到www.wms.com/employee?token=OSPIKeVNE5fyjV8w
,过滤器
拦截到请求,判断是否有局部会话
,发现没有,但是却有token参数
,由于怕人为伪造token参数
,此时需要判断token的有效性
,需要去统一认证中心
判断该token
是否来自于统一认证中心
13、sso.com
获取到tonken
,并查询数据库是否存在该token
,存在返回true
,否则返回false
;如果统一认证中心返回true
,就创建局部会话
,并设置属性isLogin=true
,放行请求,然后返回响应,将sessionId
存储到cookie
中
14、第二次访问,请求就会把本地的cookie
带上(sessionId
),然后在服务器找到与之对应的session,获取isLogin属性,若值为true,则说明有局部会话
,此时放行请求
相关文章
- 单点登录Cookie和Session存储流程
- PHP——注册页面,审核页面,登录页面:加Session和Cookie - Chen_s
- Spring Security Oauth2 单点登录案例实现和执行流程剖析
- [py][mx]django的cookie和session操作-7天免登录
- 基于session和cookie的登录验证(CBV模式)
- 基于cookie和session的登录验证
- cookie和session实现登录验证
- Cookie 和 Session、实现用户登录逻辑
- JavaWeb学习记录总结(二十九)--Servlet\Session\Cookie\Filter实现自动登录和记住密码
- 本地存储localStorage sessionStorage 以及 session 和cookie的对比和使用