Springboot实现阿里云通信短信服务有关短信验证码的发送功能

作者:喝酒不骑马 时间:2022-07-24 15:36:53 

前言

短信验证码是通过发送验证码到手机的一种有效的验证码系统。主要用于验证用户手机的合法性及敏感操作的身份验证。

现在市面上的短信服务平台有很多。大家在选择的时候未免会有些不好抉择。本人建议选择短信服务商应遵循以下几点:

  1. 服务商知名度高,业务流量大。(这样的平台可信度高)

  2. 服务稳定,不能经常宕机。(保证自身业务的流畅运行)

  3. 文档全面详细。(没文档怎么玩?)

最近的一个项目中,注册和修改密码时需要用到短信验证码校验手机号的功能。本人也是对比几家后,直接选择阿里云通信的短信服务。(本身项目服务器也是部署在阿里云上,但之前并不知道阿里云有短信服务,早知道阿里有的话就不会浪费时间找其他平台了)。废话不多说,下面直接开始短信验证服务教程。

准备

1.登录阿里云,开通阿里云通信短信服务。

2.申请accessKey

选择右上角accessKeys,创建一个access key

Springboot实现阿里云通信短信服务有关短信验证码的发送功能

3.进入控制台,申请短信签名。这个作用就是用于短信前面“【】”里面的名称。输入时不需要带“【】”

Springboot实现阿里云通信短信服务有关短信验证码的发送功能 

注意申请规范,要不然审核不会过。符合规范的话一般一个小时左右就能通过了。

我这里的签名是“喝酒不骑马”

Springboot实现阿里云通信短信服务有关短信验证码的发送功能 

4.申请短信模版

模板类型选择验证码。注意,选择验证码后,模板替代变量只支持验证码作为变量,且变量替换值<=6位数字或字母。

我的模板如下图

Springboot实现阿里云通信短信服务有关短信验证码的发送功能 

1.下载SDK包

https://help.aliyun.com/document_detail/55284.html

下载后,我们需要使用

aliyun-java-sdk-core-3.2.2.jar

aliyun-java-sdk-dysmsapi-1.0.0-SANPSHOT.jar

aliyun-sdk-mns-1.1.8.jar

这三个包

SpringBoot + Maven下的jar包配置

1.在工程的resources目录下新建一个lib文件夹,将jar包复制进去。

Springboot实现阿里云通信短信服务有关短信验证码的发送功能

2.由于maven库中没有上述几个jar包的依赖,所以需要将本地lib目录下的jar包导入到maven中。并在pom.xml文件中填下如下依赖。


<dependency>
<groupId>aliyun-message-sdk-core</groupId>
<artifactId>aliyun-message-sdk-core</artifactId>
<version>3.2.3</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/aliyun-java-sdk-core-3.2.2.jar</systemPath>
</dependency>
<dependency>
<groupId>aliyun-message-sdk-mns</groupId>
<artifactId>aliyun-message-sdk-mns</artifactId>
<version>1.1.8</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/aliyun-sdk-mns-1.1.8.jar</systemPath>
</dependency>
<dependency>
<groupId>aliyun-java-sdk-dysmsapi</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/aliyun-java-sdk-dysmsapi-1.0.0-SANPSHOT.jar</systemPath>
</dependency>

注意, <groupId>、<artifactId>、<version>随意填写。<scope>system</scope>必须要加,这表示导入本地的jar包。

${project.basedir}为项目的根路径。

建立AliyunMessageUtil工具类


public class AliyunMessageUtil {
private static final String product = "Dysmsapi";
//产品域名,开发者无需替换
private static final String domain = "dysmsapi.aliyuncs.com";
// 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
private static final String accessKeyId = "这里替换你的accessKeyId";
private static final String accessKeySecret = "这里替换你的accessKeySecret";
public static SendSmsResponse sendSms(Map<String, String> paramMap) throws com.aliyuncs.exceptions.ClientException {
 //可自助调整超时时间
 System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
 System.setProperty("sun.net.client.defaultReadTimeout", "10000");
 //初始化acsClient,暂不支持region化
 IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
 DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
 IAcsClient acsClient = new DefaultAcsClient(profile);
 //组装请求对象-具体描述见控制台-文档部分内容
 SendSmsRequest request = new SendSmsRequest();
 //必填:待发送手机号
 request.setPhoneNumbers(paramMap.get("phoneNumber"));
 //必填:短信签名-可在短信控制台中找到
 request.setSignName(paramMap.get("msgSign"));
 //必填:短信模板-可在短信控制台中找到
 request.setTemplateCode(paramMap.get("templateCode"));
 //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为$[code]"时,此处的值为
 request.setTemplateParam(paramMap.get("jsonContent"));
 //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
//  request.setSmsUpExtendCode(paramMap.get("extendCode"));
 //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
//  request.setOutId(paramMap.get("outId"));
 //hint 此处可能会抛出异常,注意catch
 SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
 return sendSmsResponse;
}
}

sendSms(Map<String, String> paramMap)方法是我封装的方法。传入的参数是paramMap,其中包含以下属性:

phoneNumber:接受者手机号

msgSign:短信签名名称。在控制台的短信签名里能找到。

templateCode:短信模版的code。见控制台中的模版code。

jsonContent:需要替换的变量的JSON字符串。对于验证码来说,String jsonContent = "{\"number\":\"" + randomNum + "\"}";即可。其中randomNum是随机生成的6位验证码。

extendCode:上行短信模板的验证码,不需要的话可以忽略

outId:扩展字段,不需要则可以忽略

调用demo


public String sendMsg() throws LgdServiceException, ClientException {
String phoneNumber = "18888888888";
String randomNum = createRandomNum(6);
String jsonContent = "{\"number\":\"" + randomNum + "\"}";
Map<String, String> paramMap = new HashMap<>();
paramMap.put("phoneNumber", phoneNumber);
paramMap.put("msgSign", "喝酒不骑马");
paramMap.put("templateCode", "xxxxxxxx");
paramMap.put("jsonContent", jsonContent);
SendSmsResponse sendSmsResponse = AliyunMessageUtil.sendSms(paramMap);
if(!(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK"))) {
 if(sendSmsResponse.getCode() == null) {
  //这里可以抛出自定义异常
 }
 if(!sendSmsResponse.getCode().equals("OK")) {
   //这里可以抛出自定义异常
 }
}
}
/**
* 生成随机数
* @param num 位数
* @return
*/
public static String createRandomNum(int num){
String randomNumStr = "";
for(int i = 0; i < num;i ++){
 int randomNum = (int)(Math.random() * 10);
 randomNumStr += randomNum;
}
return randomNumStr;
}

总结

短信效果如图所示

Springboot实现阿里云通信短信服务有关短信验证码的发送功能 

对于验证码的校验,可参见我的另一篇博文SpringBoot实现短信验证码校验.

以上所述是小编给大家介绍的Springboot实现阿里云通信短信服务有关短信验证码的发送功能网站的支持!

来源:http://blog.csdn.net/Colton_Null/article/details/77283193

标签:spring,boot,阿里云,短信,验证码
0
投稿

猜你喜欢

  • Java日期操作方法工具类实例【包含日期比较大小,相加减,判断,验证,获取年份等】

    2023-11-25 12:14:40
  • java多线程详细总结

    2023-01-10 14:16:04
  • C#实现身份证号码验证的方法

    2022-11-08 09:15:34
  • C#中比较常用的DateTime结构的使用方法

    2023-01-06 21:33:11
  • C#中调用SAPI实现语音合成的2种方法

    2023-07-07 09:36:00
  • 解决问题:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources

    2023-11-23 23:40:39
  • Java实现俄罗斯方块的源码分享

    2023-02-17 04:20:48
  • c#继承与多态使用示例

    2021-11-24 16:48:33
  • Java关于IO流的全面介绍

    2023-08-12 08:14:46
  • SpringMVC 参数绑定相关知识总结

    2022-06-05 12:50:54
  • Java AtomicInteger类使用方法实例讲解

    2023-01-18 16:22:49
  • C#连接ODBC数据源的方法

    2023-04-20 07:30:33
  • java控制台输出百分比进度条示例

    2023-08-21 22:58:20
  • Java 数据结构与算法系列精讲之单向链表

    2023-07-10 08:22:12
  • java对象初始化代码详解

    2023-09-19 13:59:01
  • Spring Boot环境属性占位符解析及类型转换详解

    2023-10-21 20:37:35
  • java仿windows记事本小程序

    2023-11-25 09:24:43
  • C#生成带二维码的专属微信公众号推广海报实例代码

    2023-04-04 23:30:57
  • C#编程实现获取文件夹中所有文件的文件名

    2022-11-16 07:53:10
  • java 实现文件复制和格式更改的实例

    2023-10-21 08:07:49
  • asp之家 软件编程 m.aspxhome.com