ssm + redis 实现sso单点登陆

1.原理讲解

因为CAS 过于重量级且时间成本较高 ,因此我决定公司采用本身的sso 单点系统来处理系统之间只要一个系统登陆成功,其余子系统就不用登陆。redis

举例说明:  好比公司有 系统 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 登陆接口

直接上代码截图服务器


能够根据本身的规则生产tokencookie

2.2  SSO 登陆认证接口


根据token去redis缓存查询是否有登陆信息session

3 A系统登陆认证

将登陆的cookie存入到 .test.com域名(你能够修改为本身的域名)spa

B系统登陆也是相似.net

4. A ,B系统其余资源访问拦截器处理(去校验token是否有效)


你能够在此处添加本身的用户信息缓存到本系统的redis服务器的逻辑代码(注意缓存用户时间要比SSO系统时间短 不然SSO用户信息过时)blog

B系统与之相似token

至此核心逻辑写完!

Demo下载地址:https://download.csdn.net/download/zzxwx/10337801

一样是单点登陆的例子:https://blog.csdn.net/tanga842428/article/details/79756992

注意事项:考虑同一帐号多个客户端登陆状况,须要比对用户IP地址。

相关文章
相关标签/搜索