1.原理讲解
由于CAS 过于重量级且时间成本较高 ,所以我决定公司采用自己的sso 单点系统来处理系统之间只要一个系统登录成功,其他子系统就不用登录。
举例说明: 比如公司有 系统 A 系统 B 此时我们就要定义一个专门用来做登录认证的sso系统。 如果用户登录的是A系统,那么A系统登录的时候就要去SSO做登录校验!校验完成后SSO系统就会返回给A系统对应登录是否成功的标识(成功的话将token存入到SSO系统中的redis缓存中去 key根据用户名时间戳密码自己定义的sign来生成) 并且会给用户返回唯一的登录成功凭证token。A系统收到token后 将token存入A系统的 此时如果访问B系统网址 B系统先到cookie中获取对应的信息。如果存在就去SSO的认证接口认证token是否正确 SSO系统根据token凭证(SSO系统去redis校验是否有值 有值就更新redis的缓存时间和传统session 一样的原理)来判断返回给B系统对应是否成功的表示。如果有就直接跳转。没有就去登录页面。
其实这个地方有两种情况的(1.所有系统都是 一级域名下的子域名包括一级域名 这样就不存在cookie跨域,2.如果想要不同的域名间跳转那么只能将cookie存入到SSO系统并且所有的登录都在SSO系统页面! 所有子系统都要跳转到SSO系统。成功或者失败再重定向到子系统中。这样就不会存在跨域问题了)
2.代码讲解
2.1 SSO 登录接口
直接上代码截图
可以根据自己的规则生产token
2.2 SSO 登录认证接口
根据token去redis缓存查询是否有登录信息
3 A系统登录认证
将登录的cookie存入到 .test.com域名(你可以修改成自己的域名)
B系统登录也是类似
4. A ,B系统其他资源访问拦截器处理(去校验token是否有效)
你可以在此处添加自己的用户信息缓存到本系统的redis服务器的逻辑代码(注意缓存用户时间要比SSO系统时间短 否则SSO用户信息过期)
B系统与之类似
至此核心逻辑写完!
关注公众号领取海量IT资料和分布式解决方案等博文