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