【SpringBoot】使用阿里云实现短信验证

前言

 之前在写Redis相关内容的时候,提到了Redis可以和我们的短信验证结合起来使用,于是这几天博主空了,想起来这个事,连忙学习了阿里云关于短信验证的内容,使用SpringBoot框架进行代码书写,并将Redis结合起来一起使用。详细内容如下,各位小伙伴“放心食用”〜

一、准备工作

1、阿里云的AcceccKey ID和AccessSecret

     登录阿里云,并实名认证,这里我只是大概讲解需要做那些步骤,最重要的是获得AcceccKey ID和AccessSecret,然后关于开通sms短信服务的操作(比较繁琐),小伙伴们可以在哔哩哔哩上找向相关的视频看操作,这样一来更容易理解一些。

①创建一个用户组并添加sms权限

58e267cb307e43daaf893b81334e4678.png

②创建一个用户

fde347c9e9804e8fb3380fc369b8fd60.png

③获得我们的AcceccKey ID和AccessSecret

47401bfc952e4050b5e3a4a30a91bf4e.png

2、开通阿里云的短信服务

①在搜索框搜索“短信服务”

cb4f9a3af7004c17bc4f2b22cf05d094.png

②根据“快速学习和测试”完成任务

ac0382ac3fd34790a76394f71a1c22f6.png

③根据提示完成“签名管理”和“模板管理”

6ffe91ab83964934ba1bce1252043dce.png

ps:审核的时候,可能审核的时间有点长,请耐心等待!

3、代码开发准备

导入短信发送的Java的SDK依赖

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dysmsapi20170525</artifactId>
            <version>2.0.24</version>
        </dependency>

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>2.2.1</version>
        </dependency>

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.6.1</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

4、创建一个Idea项目

项目的目录如下:

53ce32d70c7744b69edbdb56724091f7.png

二、代码实现

1、Service层代码书写

①接口代码

public interface SendMessage {
    public boolean send(String phone, String templateCode, Map<String,Object> code);
}

②实现类!!!

这段代码是核心,是阿里云官方写的一个API接口,里面的数据如签名、AcceccKey ID和AccessSecret等根据自己的情况填写即可,相应的代码也有注解!

ps:代码中phone手机号,要提前在阿里云官方,设置好测试用的手机号,不然到时候可能收不到短信信息。

@Service
public class SendMessageImp implements SendMessage {
    @Override
    public boolean send(String phone, String templateCode, Map<String, Object> code) {
        //初始化配置对象 com.aliyuncs.profile.DefaultProfile 。 Profile 对象存放 your-access-key-id、your-access-key-secret 和 your-region-id
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI5tCdq6x**********", "RYgTJUPy******************");
        //实例化一个客户端,从 com.aliyuncs.IAcsClient 类生成对象 client
        IAcsClient client = new DefaultAcsClient(profile);

        // 创建API请求并设置参数
        //创建对应 API 的 Request 。 类的命名规则为 API 方法名加上 Request
        SendSmsRequest request = new SendSmsRequest();
        //设置请求类 request 的参数。 通过 request 类的 setXxx 方法设置必要的信息,即 API 中必须要提供的信息,通过 set 方法设置参数
        //手机号、验证码、签名、模板
        request.setPhoneNumbers(phone); // 该参数值为假设值,请您根据实际情况进行填写
        request.setSignName("***"); // 该参数值为假设值,请您根据实际情况进行填写
        request.setSysMethod(MethodType.POST);
        request.setTemplateCode(templateCode);
        //构建验证码
        request.setTemplateParam(JSONObject.toJSONString(code));
        try {
            //通过 client 对象获得对应 request 响应 response
            SendSmsResponse response = client.getAcsResponse(request);
            System.out.println(JSON.toJSONString(response));
            // 打印您需要的返回值,此处打印的是此次请求的 RequestId
            System.out.println(response.getRequestId());
            return response.getMessage().equals("OK");
        } catch (ServerException e) {
            //服务端报错
            e.printStackTrace();
        } catch (ClientException e) {
            // 打印错误码,客户端报错
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }
        return false;
    }
}

2、controller层代码书写

在该代码中是引入了SpringBoot自带的Redis模板,用于存储code(随机生成)的值,并设置一定的有效时间,防止code在短时间内失效。

①Redis简单配置

5e08613cdb91428f8d667983d59b18e4.png

具体代码如下:

@RestController
@CrossOrigin//支持跨域问题
public class SmsController {

    @Resource
    private SendMessage sendMessage;

    @Resource
    private RedisTemplate<String,String> redisTemplate;

    @GetMapping("/send/{phone}")
    public String Send(@PathVariable("phone") String phone){
        //调用方法(真实业务)
        String code = redisTemplate.opsForValue().get(phone);//获取取得的手机号
        //如果code不为空则说明将code放入了缓存,而且没有过期
        if(!StringUtils.isEmpty(code)){
            return phone + ":" +code + "未过期";
        }
        //生成4个字的验证码存储在redis中
        code = RandomStringUtils.random(5, new char[]{'0','1','2','3','4','5','6', '7', '8', '9'});

        //String code=random.next(10000);
        HashMap<String,Object> map = new HashMap<>();
        map.put("code",code);
        boolean sms = sendMessage.send(phone, "SMS_*****", map);
        if(sms){
            redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MICROSECONDS);
            return phone+":"+code+"发送成功";
        }else
        return phone+":"+code+"发送失败";
    }
}

三、效果图

访问接口:

c0cada5ee9dd45bf9e593a58553dc41f.png

手机短信截图:

c844fff1b41a41fe954f685c917b8559.png

四、总结

  到这儿,关于这个阿里云短信验证的代码就集成好了,需要的小伙伴就可以直接拿去使用。还是那句话,如果这篇博客对你有所帮助,别忘了关注、点赞支持博主一波哦〜你们的支持就是博主更下去的动力,咱们下一篇博客再见!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值