Pc端和移动端 修改 token用户信息,数据的一致性

经常会遇到pc端和移动端 登录后 需要在redis里边存储用户信息,返回一个token给前端,然后通过token获取用户信息,当pc和移动端修改了用户信息之后,另一端会的数据还是不会发生改变,所以要在token存储的过程中做文章:

  • 1
  • 登录时:先获取token(jwt等加密) ,用户信息,然后将token为key,用户id为value 保存在redis中,然后再通过用户id为key 存储用户信息:
  Jedis jedis = jedisPool.getResource();
        try{
            subject.login(usernamePasswordToken);
            LoginRequestModel login = customerService.findByMob(requestModel.getMobile());
            JwtUtils jwtUtils = new JwtUtils();
            resultMap.put("token",jwtUtils.generateToken(Long.valueOf(login.getId())));
            jedis.set(jwtUtils.generateToken(Long.valueOf(login.getId())),login.getMobile());
            if(!jedis.exists(login.getMobile())){
                jedis.set(login.getMobile(), SerializeUtil.objectSerialiable(login));
            }
            jedis.sadd("online_number",login.getMobile());
            resultMap.put("status",0);
            resultMap.put("message", "登录成功");

部分代码;
主要:

            jedis.set(jwtUtils.generateToken(Long.valueOf(login.getId())),login.getMobile());
            if(!jedis.exists(login.getMobile())){
                jedis.set(login.getMobile(), SerializeUtil.objectSerialiable(login));
            }

2,通过token获取用户信息

  @GetMapping("/index")
    public AjaxResult index(HttpServletRequest request) {
        String token = request.getHeader("token");
        Jedis jedis = jedisPool.getResource();
        try {
            String tokens = jedis.get(token);
            if (null != tokens && !tokens.equals("")){
                String loginRequest = jedis.get(tokens);
                LoginRequestModel loginRequestModel = (LoginRequestModel) SerializeUtil.objectDeserialization(loginRequest);
                if (loginRequestModel.getMobile() != null) {
                    jedis.sadd("online_number", loginRequestModel.getMobile());
                    return AjaxResult.successState("", 0, loginRequestModel);
                } else {
                    return AjaxResult.error("验证失败", 1);
                }
            }
        } catch (Exception ex) {
            return AjaxResult.error("验证失败" + ex, 1);
        } finally {
            jedis.close();
        }
        return AjaxResult.error("验证失败", 1);
    }

主要:

 String tokens = jedis.get(token);
            if (null != tokens && !tokens.equals("")){
                String loginRequest = jedis.get(tokens);
                LoginRequestModel loginRequestModel = (LoginRequestModel) SerializeUtil.objectDeserialization(loginRequest);

3.退出时

 @GetMapping("/logout")
    public Map<String,Object> loginout(HttpServletRequest request){
      Map<String,Object> resultMap = new LinkedHashMap<>();
        Jedis jedis = jedisPool.getResource();
        String token = request.getHeader("token");
      try{
          if(null != token){
              String loginRespose =jedis.get(token);
              if(null == loginRespose || loginRespose.equals("")){
                  resultMap.put("status",1);
                  resultMap.put("message","数据异常,请刷新页面");
              }else {
                  String tokens = jedis.get(loginRespose);
                  LoginRequestModel loginRequestModel = (LoginRequestModel) SerializeUtil.objectDeserialization(tokens);
                  jedis.srem("online_number",loginRequestModel.getMobile());
                  jedis.del(token);
                  resultMap.put("status",0);
                  resultMap.put("message", "您已安全退出!");
              }
          }
      }catch (Exception e){
          System.err.println(e.getMessage());
      }
      finally {
          jedis.close();
      }
      return resultMap;
    }

这样不管是pc端 还是移动端修改了redis中用户信息,都会保证数据的一致性;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XC_Aaron

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值