controller
@PostMapping("/login")
public Result<JSONObject> login(@RequestBody UserLoginModel userLoginModel) throws Exception {
Result<JSONObject> result = new Result<>();
String username = userLoginUtil.decrypt(userLoginModel.getUsername());
String pwd = userLoginUtil.decrypt(userLoginModel.getPwd());
String code = userLoginUtil.decrypt(userLoginModel.getCode());
Object codeCheck = redisUtil.get(codeCheckKey);
if (code == null || code.length() == 0) {
result.error500("验证码无效");
return result;
}
if (!codeCheck.toString().equals(code.toLowerCase())) {
result.error500("验证码错误");
return result;
}
LambdaQueryWrapper<AppUser> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AppUser::getUsername, username);
AppUser appUser = appUserService.getOne(queryWrapper);
if (appUser == null) {
result.error500("用户名不存在");
return result;
}
String password = userLoginUtil.encryptPassword(username, pwd, appUser.getSalt());
if (!password.equals(appUser.getPassword())) {
result.error500("用户名或密码错误");
return result;
}
SessionUtil.setUser(appUser);
generateToken(appUser, result);
return result;
}
token
private Result<JSONObject> generateToken(AppUser appUser, Result<JSONObject> result) {
String password = appUser.getPassword();
String username = appUser.getUsername();
String token = JWTUtil.sign(username, password);
redisUtil.set("prefix_user_token_" + token, token);
redisUtil.expire("prefix_user_token_" + token, 60 * 30);
JSONObject obj = new JSONObject();
obj.put("token", token);
obj.put("userInfo", appUser);
result.success(obj);
return result;
}
JWTUtil.sign
public static String sign(String username, String secret) {
Date date = new Date(System.currentTimeMillis() + 60 * 30);
Algorithm algorithm = Algorithm.HMAC256(secret);
return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm);
}