1.原理讲解redis
因为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跨域cookie
2.若是想要不一样的域名间跳转那么只能将cookie存入到SSO系统而且全部的登陆都在SSO系统页面! 全部子系统都要跳转到SSO系统。成功或者失败再重定向到子系统中。这样就不会存在跨域问题了session
2.代码讲解blog
2.1 SSO 登陆接口token
直接上代码截图接口
能够根据本身的规则生产token资源
2.2 SSO 登陆认证接口
根据token去redis缓存查询是否有登陆信息
3 A系统登陆认证
将登陆的cookie存入到 .test.com域名(你能够修改为本身的域名)
B系统登陆也是相似
4. A ,B系统其余资源访问拦截器处理(去校验token是否有效)
你能够在此处添加本身的用户信息缓存到本系统的redis服务器的逻辑代码(注意缓存用户时间要比SSO系统时间短 不然SSO用户信息过时)
B系统与之相似
至此核心逻辑写完!