SSO单点登录系统实现
Posted 天赋吉运科技
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSO单点登录系统实现相关的知识,希望对你有一定的参考价值。
回顾
Q 什么是单点登录?
A SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。
咱们就拿支付宝和淘宝来说,咱们在淘宝上购物,然后就可以直接连接到自己的支付宝,这个过程不需要我们再次登录系统,自动就完成了跳转。这个操作就是单点登录。
一、前言
小编在前一篇博客中向大家介绍了使用单点登录的演变过程,最后一步的时候小编向大家展示了分布式架构。其中就用到了单点登录系统。这篇博客继续接上一篇博客,实现一下单点登录系统。
二、环境准备
Eclipse
Redis
三、单点登录流程图
这个是简单的单点登录流程图,就那淘宝来说,当我们进步淘宝首页的时候是没有登录的,点击登录的时候,会跳转到用户登录界面。此时的用户登录界面就是咱们SSO系统的一部分,根据登录的要求,会接收用户名和密码,然后根据用户名查询密码是否正确。
如果不正确就跳转到登录页,提示不正确;
如果正确就要进行以下步骤:
1
生成一个uuid,作为token;
2
把用户信息序列化存储到redis,存储的key为token,存储成功后,返回token;
3
把token存储到cookie;
4
判断是否有回调url,如果有,跳转到指定url;如果没有,跳转到系统首页;
四、实现过程
4.1 使用到的技术
Mybatis
Spring
Springmvc
Jedis
4.2 创建项目
创建Maven项目:
4.3 依赖的jar包
pom文件:
4.4 整合SSM框架
这里的整合可以参考小编以前写的SSM整合博客。
4.5 登录逻辑实现
DAO层:
直接使用Mybatis逆向工程产生的代码。
Service层:
接收参数:用户名、密码。
校验密码是否正确,生成token,向redis中写入用户信息,把token写入cookie,返回SystemResult实体包含token。
参数:用户名、密码、HttpServletResponse、HttpServletRequest
返回值:TaotaoResult
Controller层:
请求的url:/user/login
接收参数:username、password
调用Service,返回taotaoResult对象。
响应json数据。
4.6 通过token查询用户信息
说明:根据token到redis查询用户信息,如果用户信息不存在说明session已经过期,返回400并提示用户session已经过期。如果查询到用户,返回用户信息,并且更新一下用户的过期时间。
请求url:/user/token/{token}
需要支持jsonp
返回:SystemResult
Dao层:
使用Jedis访问redis实现。
Service层:
参数:String token
根据token查询redis,查询到结果返回用户对象,更新过期时间。如果查询不到结果,返回Session已经过期,状态码400.
返回值:SystemResult
Controller:
请求的url:/user/token/{token}
从url中取token的内容,调用Service取用户信息,返回TaotaoResult。(json数据)
首页系统中登录跳转的代码:
这里使用Ajax的跨域调用,先获取到存储在浏览器的cookie,然后使用Ajax的Jsonp来跨域调用用户信息,由于返回的是SystemResult的json形式,他包含了err、msg、data三个部分,所以要获取用户信息的时候就要通过data.data.username来获取。
五、小结
这次的单点登录主要是使用redis完成的。redis真是一个非常好用的缓存技术。在很多方面都做了出色的表现。另外,就是这种产生分布式,把登录系统单独提取出来,这种思想有是很棒的。加油!
联系我们
没有教不好的学生
只有不会教的老师
大米时代(北京)教育科技有限公司
座机: 010-51292788
0316-5552070
手机(微信): 15831639058
邮箱:3460307818@qq.com
编辑:十四期 刘甜
以上是关于SSO单点登录系统实现的主要内容,如果未能解决你的问题,请参考以下文章