单点登录

  • 使用redis+token方式

  • 共享session方式

  • 使用现成的框架spring-session
  • 如果共用一个顶级域名

  1. sessionid被种在顶级域名中
  2. 后台通过redis共享session的值,当请求来的时候,去redis中查询session
  3. 当请求到达服务器,服务器获取到cookie中的sessionid,然后通过sessionid到redis中获取session对象
  4. 判断是否登录,主要判断session对象中是否有user信息。
  5. 为了request.getsession时,自动能拿到redis中共享的session,我们需要重写request的getsession方法(使用HttpServletRequestWrapper包装原request)
  • 使用不同的域名(cas方案)

  1. 直接启用一个专门用来做登录的域名来提供所有系统登录
  2. 当访问业务系统a时候,发现未登录,那么就跳转到cas系统登录
  3. 用户输入用户名密码登录成功
  4. 将cookie种到cas.com下,将sessionId放入到redis,key为ticket,页面调回到a系统
  5. a系统显示仍未登录,这时候拿着ticket去redis中获取sessionid,并做session同步,将cookie种到自己域名下,原地跳转重新判断是否登录
  6. 此时,a系统显示有了cookie,登录成功。
  7. 如果跳转cas系统时就是登录的,那么直接放回ticket即可。
  • cas优化方案

第一步:用户访问a。过滤器判断用户是否登录,没有登录,则重定向(302)到网站b

第二步:重定向到b,输入用户名密码。b将用户登录的信息记录到服务器的session中。

第三步:b给浏览器发送一个特殊的凭证,浏览器将凭证交给a,a则拿着浏览器交给他的凭证去b验证凭证是否有效,从而判断用户是否登录成功

第四步:登录成功,浏览器与网站之间进行正常的访问。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值