注册功能
接口说明
基本逻辑:
-
1)校验短信验证码
-
2)生成盐
-
3)对密码加密
-
4)写入数据库
-
5)删除Redis中的验证码
UserController
/**
* 注册
* @param user
* @param code
* @return
*/
@PostMapping("register")
public ResponseEntity<Void> register(User user, @RequestParam("code") String code) {
Boolean boo = this.userService.register(user, code);
if (boo == null || !boo) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
}
return new ResponseEntity<>(HttpStatus.CREATED);
}
UserService
public Boolean register(User user, String code) {
// 校验短信验证码
String cacheCode = this.redisTemplate.opsForValue().get(KEY_PREFIX + user.getPhone());
if (!StringUtils.equals(code, cacheCode)) {
return false;
}
// 生成盐
String salt = CodecUtils.generateSalt();
user.setSalt(salt);
// 对密码加密
user.setPassword(CodecUtils.md5Hex(user.getPassword(), salt));
// 强制设置不能指定的参数为null
user.setId(null);
user.setCreated(new Date());
// 添加到数据库
boolean b = this.userMapper.insertSelective(user) == 1;
if(b){
// 注册成功,删除redis中的记录
this.redisTemplate.delete(KEY_PREFIX + user.getPhone());
}
return b;
}
package com.leyou.user.utils;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.UUID;
public class CodecUtils {
public static String md5Hex(String data,String salt) {
if (StringUtils.isBlank(salt)) {
salt = data.hashCode() + "";
}
return DigestUtils.md5Hex(salt + DigestUtils.md5Hex(data));
}
public static String shaHex(String data, String salt) {
if (StringUtils.isBlank(salt)) {
salt = data.hashCode() + "";
}
return DigestUtils.sha512Hex(salt + DigestUtils.sha512Hex(data));
}
public static String generateSalt(){
return StringUtils.replace(UUID.randomUUID().toString(), "-", "");
}
}
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>