springboot中应用短信发送案例

流程:
在这里插入图片描述
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+"】发送成功");
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值