欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Token

程序员文章站 2022-07-12 12:29:34
...

一、项目中的Token

主要用做身份验证。

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

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

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

4、将Token返回给客户端 

public ServerResponse<String> 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<String> 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("修改密码失败");
}