SpringBoot接入阿里云短信服务,实现登录验证功能

为了丰富博客功能,周末闲来无事做了个登录,目前已完成手机登录、github登录。

今天这篇文章先来整理下在springboot中接入阿里云短信服务的一个具体流程。

还请多多关注我的公众号:前端进阶攻城狮 每周固定更新技术分享

或者来到我的博客进行留言 Cc技术人生

获取AccessKey信息

首先让我们登录阿里云官网,然后在右上角进入AccessKey管理

AccessKey相当于一个身份验证,调用所有阿里云提供的服务时根据这个来进行一个收费。

这里根据实际创建自己的id与secret

签名与模板

接下来通过控制台进入短信服务

如果你和我一样真实项目中需要,这里请添加你的签名和模板

签名的名称还请严谨,最好是网站的备案名,否则你会像我一样被拒绝很多次

在签名审核成功后来添加你的模板,当然这也是需要人工审核的

如果你觉得以上审核流程太过于麻烦,也可以使用提供测试的签名与模板

来到这个页面添加你的测试手机号,选择专用签名/模板,这里是不要审核的

好了,做到这里你现在一共有四样信息在手上了

accessKeyId accessKeySecret signName templateCode

现在可以开始写代码了

进入你的Springboot

首先我们把刚才拿到的几样信息写在配置文件里

yml 复制代码
message:
  accessKeyId: LTAxxxxxxxxxxxxxxxxx2Ej
  accessKeySecret: GuyxxxxxxxxxxxxxxxxxxxXG
  signName: xxxx博客
  templateCode: SMS_xxxxxxxx

根据实际换成自己的

引入jar包

pom 复制代码
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>dysmsapi20170525</artifactId>
    <version>2.0.1</version>
</dependency>

编写发送短信工具函数

java 复制代码
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.dysmsapi20170525.models.SendSmsResponseBody;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import lombok.Data;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

@Data
@Component
@ConfigurationProperties(prefix = "message")
public class SendCode {
    private String accessKeyId;
  
    private String accessKeySecret;

    private String signName;

    private String templateCode;



    @SneakyThrows
    public Client createClient(String accessKeyId, String accessKeySecret){
        Config config = new Config()
                // 必填,您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 必填,您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new Client(config);
    }


    /**
     * 发送短信
     *
     * @param phoneNumber 手机号
     * @return 返回结果
     */
    @SneakyThrows
    public SendSmsResponseBody sendMessage(String phoneNumber) {

        Client client = createClient(accessKeyId, accessKeySecret);
        String code = RandomUtil.buildCheckCode(4);
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                .setSignName(signName)
                .setTemplateCode(templateCode)
                .setPhoneNumbers(phoneNumber)
                .setTemplateParam("{\"code\":\""+code+"\"}");
        RuntimeOptions runtime = new RuntimeOptions();
        // 复制代码运行请自行打印 API 的返回值
        SendSmsResponse response = client.sendSmsWithOptions(sendSmsRequest, runtime);

        SendSmsResponseBody body = response.getBody();
//        return body;
        if(body.getCode().equals("OK")){
            return body;
        }else {
           throw new RuntimeException(body.getMessage());
        }
    }
}

编写生成随机数字的工具函数

java 复制代码
import java.util.Random;

public class RandomUtil {
    /**
     * 生成验证码
     * @param digit 位数
     * @return
     */
    public static String buildCheckCode(int digit){
        String str = "0123456789";
        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < digit; i++) {
            char ch = str.charAt(random.nextInt(str.length()));
            sb.append(ch);
        }
        return sb.toString();
    }
}

最后我们来测试一下

也是成功收到了测试短信。

总结

整体流程还是比较简单的,比较耽误时间的可能就是签名与模板的审核,大家可以提前去申请准备好以备不时之需。

如有不足之处还请评价留言交流,谢谢大家!

相关推荐
也无晴也无风雨42 分钟前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
Martin -Tang1 小时前
Vue 3 中,ref 和 reactive的区别
前端·javascript·vue.js
FakeOccupational3 小时前
nodejs 020: React语法规则 props和state
前端·javascript·react.js
放逐者-保持本心,方可放逐3 小时前
react 组件应用
开发语言·前端·javascript·react.js·前端框架
曹天骄4 小时前
next中服务端组件共享接口数据
前端·javascript·react.js
2401_857610034 小时前
多维视角下的知识管理:Spring Boot应用
java·spring boot·后端
阮少年、4 小时前
java后台生成模拟聊天截图并返回给前端
java·开发语言·前端
代码小鑫4 小时前
A027-基于Spring Boot的农事管理系统
java·开发语言·数据库·spring boot·后端·毕业设计
颜淡慕潇5 小时前
【K8S问题系列 | 9】如何监控集群CPU使用率并设置告警?
后端·云原生·容器·kubernetes·问题解决
郝晨妤6 小时前
鸿蒙ArkTS和TS有什么区别?
前端·javascript·typescript·鸿蒙