1. 单点是如何实现分布式系统共享用户信息
用一个单独服务器来存储用户信息,所有的分布式子系统都从单独服务器来获取用户信息
2. CAS实现原理
例如:
- cas服务的地址:localhost:9100
- demo1的地址:localhost:9002
- demo2的地址:localhost:9003
流程&原理:
2.1 登陆流程
(1) 访问demo1: (当前浏览器并没有登陆过)
(2) 由于当前浏览器没有登陆过,那么就重定向到CAS,并且携带一个service参数[登陆成功之后要重定向回来地址]
cas就跳转到登陆页面(3) 在cas登陆页面输入用户名和密码,点击登陆就会携带用户和密码并发送
如果cas校验用户名和密码,成功则重定向回service参数所指向的地址demo1,并且携带ticket(4) 由demo1的过滤器拦截,拦截之后将ticket取出并后台去cas服务器校验(校验地址:)
(5) 如果校验ticket成功,那么cas就可以返回用户信息,我们的子系统就可以缓存用户信息
cas:用户信息存储在session
cas登陆成功之后会返回一个非常关键的cookie:CASTGCCASTGC:value path:/cas
-- 全局会话意思:就是标识浏览器当前可能已经登陆
当子系统校验tikect成功并且,响应浏览器,那么当前子系统和浏览器之间的局部会话也就可以直接获得用户信息,只要浏览器和子系统之间的局部会话经过了ticket校验,就不会再重定向到cas服务器。
2.2 认证流程
(1) 访问demo2: , 由于没有校验过ticket,但是浏览器存在全局会话Cookie: CASTGC。
(2) 重定向到CAS服务器并且携带service参数:
由于全局会话已经存在,那么当前请求就携带CASTGC到服务器,CAS服务器就通过CASTGC这个cookie获取当前浏览器登陆状态,如果已经登陆就直接重定向会demo2同时携带ticket。(3) 接着子系统就有过滤器或者拦截器获取ticket去cas校验
(4) 如果校验ticket成功,那么cas就可以返回用户信息,我们的子系统就可以缓存用户信息,和浏览器建立局部会话