用户信息结构
CREATE TABLE `tb_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(32) NOT NULL COMMENT '密码,加密存储',
`phone` varchar(20) DEFAULT NULL COMMENT '注册手机号',
`created` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`) USING BTREE
)
验证信息逻辑
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public Boolean checkData(String data, Integer type) {
User user = new User();
switch (type){
case 1 :
user.setUsername(data);
break;
case 2 :
user.setPhone(data);
break;
default:
return null;
}
return this.userMapper.selectCount(user) == 0;
}
返回结果:
-
返回布尔类型结果:
true:可用
false:不可用 -
状态码:
200:校验成功
400:参数有误
500:服务器内部异常
发送短信
使用阿里的短信SDK。安装SDK工具包,根据注册提供的信息和demo发送短信。
消息监听
编写消息监听器,当接收到消息后,发送短信。
@Component
public class SmsListener {
@Autowired
private SmsUtils smsUtils;
@Autowired
private SmsProperties smsProperties;
@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "leyou.sms.queue",durable = "true"),
exchange = @Exchange(value = "leyou.sms.exchange",ignoreDeclarationExceptions = "true"),
key = {"sms.verify.code"}
))
public void listenSms(Map<String,String> msg){
if (msg == null || msg.size() <= 0){
//不做处理
return;
}
String phone = msg.get("phone");
String code = msg.get("code");
if (StringUtils.isNotBlank(phone) && StringUtils.isNotBlank(code)){
//发送消息
try {
SendSmsResponse response = this.smsUtils.sendSms(phone, code, smsProperties.getSignName(), smsProperties.getVerifyCodeTemplate());
}catch (ClientException e){
return;
}
}else {
//不做处理
return;
}
}
验证码
验证码逻辑
业务逻辑是这样的:
1)我们接收页面发送来的手机号码
2)生成一个随机验证码
3)将验证码保存在服务端
4)发送短信,将验证码发送到用户手机
验证码保存
验证码有一定有效期,一般是5分钟,我们可以利用Redis的过期机制来保存。
UserService设置短信验证码在Redis的缓存时间为5分钟
Redis详情见这里
Spring data Redis详情