SSM+Redis实现单点登陆

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系统与之相似

至此核心逻辑写完!  

相关文章
相关标签/搜索