用拦截器控制及redis实现同一用户只能单台设备在线

1.用拦截器控制及redis实现同一用户只能单台设备在线
前后端不分离,使用session:
登录
登录时将用户信息存储至session中。
        session.setAttribute("usserId",user.getId());

然后在将userId和sessionId 进行绑定存储至redis(也可以使用别的全局唯一数据源来存储,如静态Map,或别的缓存中间件)
        redisTemplate.opsForValue().set(user.getId(),session.getId());
拦截器判断是否在别处登录
拦截器从session中取出userId
     Long userId = (Long)session.getAttribute("usserId");
    =》 能取到表示已登录。取不到表示未登录或session过期已下线
然后在根据userId从redis中取出sessionId 根据redis中的sessionId
和当前登录sessionId进行比较
     String sessionId = (String) redisTemplate.opsForValue().get(userId);
     if (sessionId === session.getId()) 
    =》 如果一致表示没有在别处登录,如果不一致表示用户已在别处登录(因为如果有另一人在别处登录相同userId的redis会覆盖掉)
前后端分离:
登录
登录时将用户信息存储至redis中。
         redisTemplate.opsForValue().set(token,user.getId());
然后在将userId和token 进行绑定存储至redis(也可以使用别的全局唯一数据源来存储,如静态Map,或别的缓存中间件)
        redisTemplate.opsForValue().set(user.getId(),token);    
拦截器判断是否在别处登录
拦截器从redis中根据token取出userId
     Long userId = (Long)redisTemplate.opsForValue().get(token);
    =》 能取到表示已登录。取不到表示未登录或token过期已下线
然后在根据userId从redis中取出token 根据redis中的token
和当前登录token进行比较
     String redisToken = (String) redisTemplate.opsForValue().get(userId);
     if (redisToken === token) 
    =》 如果一致表示没有在别处登录,如果不一致表示用户已在别处登录(因为如果有另一人在别处登录相同userId的redis会覆盖掉)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值