Redis+Token实现身份认证及注销

登录

/**
     * 用户登录验证,成功返回token令牌
     * @param phone
     * @param pwd
     * @return
     * @throws Exception
     */
    public ReturnResult validateToken(String phone, String pwd) throws Exception {
        ReturnResult returnResult=null;
        //去数据库查询用户存不存在
        QgUser qgUser = qgUserService.queryQgUserByPhoneAndPwd(phone, pwd);
        //定义token
        String token=null;
        //用户存在就生成token并保存token
        if (qgUser!=null){
            //如果有旧token,删除替换
            String oldToken = redisUtil.getStr(qgUser.getId());
            if (EmptyUtils.isNotEmpty(oldToken)){
                redisUtil.del(qgUser.getId());
                redisUtil.del(oldToken);
            }

            //生成token
            //如果登录的用户在数据库中存在该记录,则服务器生成token
            //token生成的规则是什么?每个公司不一样,根据具体业务,我们使用的规则是(用户手机号+用户密码+时间戳,再用MD5加密拼接得到的值)
          token= Constants.tokenPrefix+ TokenUtils.createToken(qgUser.getPhone(),qgUser.getPassword());

          //保存token,两个键值对
          //第一个键值对(key是用户id,value是token值)
          redisUtil.setStr(qgUser.getId(),token);
          //第二个键值对(key是token,value是用户对象)
          redisUtil.setStr(token, JSONObject.toJSONString(qgUser),Constants.loginExpire);

           HashMap<String,String> map=new HashMap<>();
           map.put("token",token);
           returnResult=ReturnResultUtils.returnSuccess(map);
        }else {
            returnResult=ReturnResultUtils.returnFail(9999,"用户名或密码错误");
        }
        return returnResult;//返回token,如果为null则该用户不存在,如果不为null则返回的是token令牌(生成的token字符串)
    }

注销

 /**
     * 去除token
     * @param token
     * @return
     * @throws Exception
     */
    public ReturnResult removeToken(String token) throws Exception {
        ReturnResult returnResult=null;
        //工具前端传来的token去redis里查询
        String str = redisUtil.getStr(token);
        if(EmptyUtils.isNotEmpty(str)){//如果不为空,则删除token
            //将redis里的数据转换为对象
            QgUser qgUser = JSONObject.parseObject(str, QgUser.class);
            //删除redis里用户两个键值对
            redisUtil.del(qgUser.getId());
            redisUtil.del(token);
            //返回成功信息
            returnResult=ReturnResultUtils.returnSuccess();
        }else{
            //如果没有用户信息,则登录超时,返回错误信息
            returnResult=ReturnResultUtils.returnFail(CommonException.USER_NO_LOGIN.getCode(),CommonException.USER_NO_LOGIN.getMessage());
        }
        return returnResult;//返回结果
    }
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值