流程:
usercontroller代码实现:
import com.fasterxml.jackson.databind.ser.Serializers;
import czxy.common.BaseResult;
import czxy.util.JWTUtil;
import czxy.util.RandomUtil;
import io.jsonwebtoken.Claims;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;
import pojo.User;
@RestController
@RequestMapping("/user")
public class UserController {
//能够获取到authrization,就可以解析,拿到user_id,就是created_id
// @Autowired
// private HttpServletRequest request;
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private StringRedisTemplate redisTemplate;
@PostMapping
public BaseResult addUser(@RequestBody User user,@RequestHeader("Authorization") String authorization){
// String token = request.getHeader("authorization");
Claims claims = JWTUtil.parseToken(authorization, "user");
Object userId = claims.get("userId");
System.out.println("新增的用户信息:"+user);
return BaseResult.success(null);
}
/**
* 1 产生随机码6位
* 2 保存到rabbitMQ中
* 3 保存到redis中
* 4 返回发送成功
* @param phone
* @return
*/
// xxxx/sendSms?phone=电话号码
@GetMapping("/sendSms")
public BaseResult sendSMS(String phone){
// 1 产生随机码6位
String code = RandomUtil.code();
//拼接消息内容
String msg = phone + "%%%%%%" + code;
// 2 保存到rabbitMQ中
rabbitTemplate.convertAndSend("sms.queue",msg);
// 3 保存到redis中
redisTemplate.opsForValue().set(phone,code,1, TimeUnit.MINUTES);
// 4 返回发送成功
return BaseResult.success("成功");
}
@PostMapping("/regist")
public BaseResult regist(@RequestBody User user){
// 1 根据手机号码去redis中取出验证码
String redisCode = redisTemplate.opsForValue().get(user.getMobile());
//2 验证码不存在,注册直接失败
if (redisCode==null){
return BaseResult.fail();
}
//3 验证码存在,比较验证码
if (user.getCode().equals(redisCode)){
// 验证码通过,比较两次密码是否一次
if(user.getPassword().equals(user.getRepassword())){
//4 如果密码一致,注册成功,移除redis中的验证码
System.out.println("注册成功,保存到数据库"+user);
redisTemplate.delete(user.getMobile());
return BaseResult.success("注册成功"+user);
}
}
return BaseResult.fail();
}
}
AliyunSendSmsUtil :
package com.czxy.util;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
/*
pom.xml
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.3</version>
</dependency>
*/
public class AliyunSendSmsUtil {
/**
*
* @param to 手机号码
* @param code 验证码
*/
public static void send(String to, String code) {
String accessKeyId="LTAI5t8Kz6URnpkiRkJPtjGs";
String accessSecret = "Xv7U1NfgEAD5Of6dQzSS9VuxBUjlEi";
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessSecret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", to);
request.putQueryParameter("SignName", "短信提示");
request.putQueryParameter("TemplateCode", "SMS_85550034");
request.putQueryParameter("TemplateParam", "{\"code\":\""+code+"\"}");
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
AliyunSendSmsUtil.send("176*****59","12396");
}
}
SmsListener:
package com.czxy.listener;
import com.czxy.util.AliyunSendSmsUtil;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class SmsListener {
@RabbitListener(queues = "sms.queue")
public void listenerWorkQueue1(String msg) throws Exception{
String[] vals = msg.split("%%%%%%");
AliyunSendSmsUtil.send(vals[0],vals[1]);
System.out.println("sms接收到的消息:【"+msg+"】发送成功");
}
}