spring boot登录流程之登录成功返回token

该代码段展示了用户登录过程,包括解密用户名、密码和验证码,验证用户信息,比对密码,并通过JWT生成授权令牌。如果验证失败,返回错误信息;验证成功则将用户信息存入session并设置JWT token。
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;
    }
	// 将当前用户存入session
    SessionUtil.setUser(appUser);
	// 生成token
    generateToken(appUser, result);
    return result;
}
token
private Result<JSONObject> generateToken(AppUser appUser, Result<JSONObject> result) {
   String password = appUser.getPassword();
    String username = appUser.getUsername();
	// 根据用户名和密码生成token
    String token = JWTUtil.sign(username, password);
    // 将token存入redis
    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);
   // 附带username信息
   return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值