Token

一、项目中的Token

主要用做身份验证。

1、点击忘记密码之后,检验用户名是否存在

2、存在则根据用户名查询问题

3、回答答案正确的话生产Token,并将其放到guava cache本地缓存中

4、将Token返回给客户端 

public ServerResponse checkAnswer(String username,String question,String answer){
    int resultCount = userMapper.checkAnswer(username,question,answer);
    if(resultCount > 0){       //说明问题及问题答案是这个用户的,并且是正确的
        String forgetToken = UUID.randomUUID().toString();       //声明一个token
        TokenCache.setKey(TokenCache.TOKEN_PREFIX + username,forgetToken);
        return ServerResponse.createBySuccess(forgetToken);
    }
    return ServerResponse.createByErrorMessage("问题的答案错误");
}

重置密码的时候需要携带Token:

//忘记密码中的重置密码
public ServerResponse forgetResetPassword(String username,String passwordNew,String forgetToken) {
    if (org.apache.commons.lang3.StringUtils.isBlank(forgetToken))      //先判断是否携带了token
        return ServerResponse.createByErrorMessage("参数错误,token需要传递");
    ServerResponse validResponse = this.checkValid(username, Const.USERNAME);
    if (validResponse.isSuccess())           //校验一下用户名
        return ServerResponse.createByErrorMessage("用户不存在");
    String token = TokenCache.getKey(TokenCache.TOKEN_PREFIX + username);   //从缓存中获取用户的token
    if (org.apache.commons.lang3.StringUtils.isBlank(token))                //获取到看token是否为空
        return ServerResponse.createByErrorMessage("token无效或者过期");
    if (org.apache.commons.lang3.StringUtils.equals(forgetToken, token)) {         //比较token是否相等
            String md5Password = MD5Util.MD5EncodeUtf8(passwordNew);
            int rowCount = userMapper.updatePasswordByUsername(username, md5Password);  //更新密码
            if (rowCount > 0)  //如果个数大于1,则更新密码成功
                return ServerResponse.createBySuccessMessage("修改密码成功");
    }else {
            return ServerResponse.createByErrorMessage("token错误,请重新获取重置密码的token");
    }
    return ServerResponse.createByErrorMessage("修改密码失败");
}

 

你可能感兴趣的:(Token)