springboot简版单点登录的实现

springboot简版单点登录的实现

项目现状

目前项目状态:

  1. 访问系服务必须要登录系统,拿到随机token值
  2. 随机token存储到Redis中(有效期两个小时)
  3. 前端访问服务,将token 放入heard中,服务判断token在Redis中权限
  4. 目前基本满足对权限控制的要求

新的需求

要求用户只能在一个地方登陆,多个地方登陆,只让最后一次登陆是有效的(即剔除之前登陆等token)

现存问题

  1. 账号是唯一的,但是多处登陆,每次登陆的token都是随机
  2. 用户登录,权限信息虽然都是相同的,但是每个copy的名字(即token都是不一样,不能判断哪个是正统

解决思路

  1. 在用户登录时随机生成keyId(随机值或者时间戳)

    keyId放入token 中,随权限信息一起存入Redis

  2. 将keyId放入Redis中

    "userId":"KeyId"
    

    userId是用户主键

    这里是重点:用户登录进来都会更新其Redis中对应的keyId

  3. 请求服务时,token的校验顺序

    1. 校验token是否存在
    2. 拿到token中userId和keyId
    3. 用上述userId获取Redis中的keyId
    4. 比较2和3步骤中keyId的值是否一致,不一致说明:用户已经在新的地址登陆了,并删除此次访问的token
    5. 其他权限或者资源的校验等等
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值