一、什么是单点登录?
单点登录的英文名叫做:Single Sign On(简称SSO)。
在以前的时候,一般就是单系统,所有的功能都在同一个系统上。
后来,我们为了合理利用资源和降低耦合性,于是把单系统拆分成多个子系统。
回顾:分布式基础知识
比如阿里系的淘宝和天猫,很明显这是两个系统,但是你在使用的时候,登录了天猫,淘宝也会自动登录。
简单来说,单点登录就是在多个系统中,用户只需一次登录,各个系统即可感知该用户已经登录。
二、回顾单系统登录
众所周知,HTTP是无状态的协议,这意味着服务器无法确认用户的信息。于是乎,W3C就提出了:给每一个用户都发一个通行证,无论谁访问的时候都需要携带通行证,这样服务器就可以从通行证上确认用户的信息。通行证就是Cookie。如果说Cookie是检查用户身上的”通行证“来确认用户的身份,那么Session就是通过检查服务器上的”客户明细表“来确认用户的身份的。Session相当于在服务器中建立了一份“客户明细表”。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一个用户。于是乎,服务器向用户浏览器发送了一个名为JESSIONID的Cookie,它的值是Session的id值。其实Session是依据Cookie来识别是否是同一个用户。
所以,一般单系统实现登录会这样做:
-
登录:将用户信息保存在Session对象中
1)如果在Session对象中能查到,说明已经登录;
2)如果在Session对象中查不到,说明没登录(或者已经退出了登录) -
注销(退出登录):从Session中删除用户的信息
-
记住我(关闭掉浏览器后,重新打开浏览器还能保持登录状态):配合Cookie来用
三、多系统登录的问题与解决思路
1.Session不共享问题
单系统登录功能主要是通过Session保存用户信息来实现的,但是多系统即可能有多个Tomcat(即服务器),而Session是依赖