单点登录

传统单一服务器登录模式: 登录

(1)传统的方式:使用session对象实现
登录成功后,就把用户数据放在session里面
判断是否登录,从session获取数据,可以获取到登录信息,就是登录成功。

session.setAttribute("user",user);   //将用户信息存放在session里面
session.getAttribute("user");  //得到session用户信息

(2)缺点:就是现在目前都是倾向于多台服务器,基本上企业都是使用微服务架构/分布式架构。这样的 话基本都是由每一个功能组成一个个小的微服务模块。每一个服务器都不一样,导致传统的方式session对象来实现,必须要实现每一个模块都要登录一次,这样很麻烦。
在这里插入图片描述
(3)举一个例子:在我们在百度首页网页进行个人登录后,我们再去浏览贴吧,文库,音乐…一系列的功能,都不需要登录。百度就好比我们的总项目,文库,音乐…就好比是我们的一个个微服务,只要我们在任意的微服务模块登录了,其他的模块就不需要登录,就可以直接浏览。这就是单点登录。

实现单点登录(sso):

单点登录说白了就是为了每一个模块在登录这一方面做到统一。一次登录,其他服务器(模块)都显示已经登录,不需要再一次登录。

(1)session 广播机制实现

就是session的复制。登录后账户的信息将set到session里面,
然后复制到每一个微服务的服务器上,每一个服务器都携带着该session,
通过session.get判断是否得到数据,如果为空就是没有登录。有数据就是登录过。

缺点:如果微服务的模块很少,也就是说白了功能很少的话,可以使用这个方法。如果是几十个的话,每一个模块都复制判断会带来数据的冗余和性能的消耗。

(2)使用cookie+redis实现

1.在项目的任何一个模块进行登录,登录之后,把数据放在两个地方
  (1)redis: key:生成一个唯一随机值UID,就是为了唯一性。  value: 用户数据
  (2)cookie :  在Redis里面生成的key放在cookie里
2.每一个浏览器的访问,都会携带着cookie,从cookie里面得到UID,
  然后去redis里面查找。是否有相关的数据作为登录的依据。

在这里插入图片描述

(3)使用token来实现

1在项目某一个模块进行登录后,按照规则生成字符串,
     把登录之后用户包含到生成字符串里面,把字符串返回。
     (1)可以把字符串通过cookie返回
      (2)可以在地址栏返回。可以参考类似的网站
2.再去访问某一个模块的时候,就会按照相关的规则解析相关的字符串,
看是否有相关的用户信息。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值