博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

单点登录

Posted on 2018-11-25 15:44  LQliu  阅读(143)  评论(0)    收藏  举报

单点登录:

当我们想访问某个子项目或者模块的时候,会先请求登录的部分,如果登录过了,就不需要再登录了。

因为多个子项目在不同的tomcat,无法实现session共享,这时我们可以利用cookie。

关于cookie和session的区别:

cookie是针对于浏览器,session是针对服务器。
cookie的产生会有JSessionId,也就是session的唯一凭证。
cookie是当前浏览器对该父域名用作数据共享和记录的。
session是在服务器上开辟了一块内存,用于当前session(同一JSessionId)用户的数据共享。

执行流程:
用户在一个模块登录,会进到登录系统,先验证你的用户名和密码是否正确,如果正确。
会产生一个唯一票据,我们这里叫他token,把这个token放到redis中,存放方式是这样的。

redis.put(token,userId);//存储一条对应用户信息的token

我们把token返回,response.addCookie(new Cookie("my cookie",token));//这里的my cookie可以写成loingSysCookie

流程实现是这样的,需要设置过期时间等参数。

这时候只要是同一浏览器,就会带着这个cookie,访问该项目下的子项目(父级域名下的子级域名),
在进入登录系统中拿到token,进到redis中比对,是否拥有该用户信息,如果有,就不需要再登录了。

下面说一下上面的疑问:

当我再一次登录系统的时候,先去找redis中的redis,get("your setting")是否为空,已经在别处登录过的用户,可以取到他的token,

redis.del(token),这样就实现了单点登录,同步登出。

之后再设置redis和cookie,方法同上。