springboot中引入阿里短信验证码服务
| 这个作业属于哪个课程 | 2023年福大-软件工程实践-W班 |
|---|---|
| 这个作业要求在哪里 | 软件工程实践总结&个人技术博客 |
| 这个作业的目标 | 课程回顾与总结、个人技术总结 |
| 其他参考文献 | 《构建之法》 |
目录
- 一、技术概述
- 二、技术详述
- 2.1 开通短信服务
- 2.2 在springboot项目中的使用
- 三、技术使用中遇到的问题和解决过程
- 四、总结
- 五、参考文献
一、技术概述
短信验证码是通过发送验证码到手机的一种有效的验证码系统。主要用于验证用户手机的合法性及敏感操作的身份验证。常见的使用场景有:登录注册、修改用户信息等。该技术的难点主要是将阿里短信服务接入springboot项目中
二、技术详述
2.1 开通短信服务
主要是登录阿里云官网,购买短信服务后,申请签名和模板即可。参考SpringBoot整合阿里云短信服务详细过程
2.2 在springboot项目中的使用
在pom.xml中导入相关依赖
<!--阿里云短信包-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.0.0</version>
</dependency>
编写随机生成验证码类(数字)
/**
* 随机生成验证码类
*/
public class RandomUtils {
private static final Random random = new Random();
private static final DecimalFormat fourdf = new DecimalFormat("0000");
private static final DecimalFormat sixdf = new DecimalFormat("000000");
public static String getFourBitRandom() {
return fourdf.format(random.nextInt(10000));
}
public static String getSixBitRandom() {
return sixdf.format(random.nextInt(1000000));
}
/**
* 给定数组,抽取n个数据
* @param list
* @param n
* @return
*/
public static ArrayList getRandom(List list, int n) {
Random random = new Random();
HashMap<Object, Object> hashMap = new HashMap<Object, Object>();
// 生成随机数字并存入HashMap
for (int i = 0; i < list.size(); i++) {
int number = random.nextInt(100) + 1;
hashMap.put(number, i);
}
// 从HashMap导入数组
Object[] robjs = hashMap.values().toArray();
ArrayList r = new ArrayList();
// 遍历数组并打印数据
for (int i = 0; i < n; i++) {
r.add(list.get((int) robjs[i]));
System.out.print(list.get((int) robjs[i]) + "\t");
}
System.out.print("\n");
return r;
}
}
编写发送短信类
/**
* 发送验证码工具类
*/
public class SendCodeUtils {
/**
* 发送验证码
* @param param 验证码
* @param phone 电话号码
* @return
*/
public static boolean sendCode(Map<String, Object> param, String phone) {
if(StringUtils.isEmpty(phone)) {
return false;
}
//default 地域节点,默认就好 后面是 阿里云的 id和秘钥(这里记得去阿里云复制自己的id和秘钥哦)
DefaultProfile profile = DefaultProfile.getProfile("default", "LTAI5tDrzTVr6b5k8edqtfaR", "BsGTQvpUWOvgZV3y4C2sqO27SYbloO");
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("PhoneNumbers", phone);
// 阿里云的签名名称
request.putQueryParameter("SignName", "closetmate");
// 阿里云的模板code
request.putQueryParameter("TemplateCode", "SMS_460660149");
// 短信模板变量对应的实际值
request.putQueryParameter("TemplateParam", JSONObject.toJSONString(param));
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
JSONObject jsonObject = JSON.parseObject(response.getData());
String code = (String) jsonObject.get("Code");
if (!code.equals("OK")) {
return false;
}
return response.getHttpResponse().isSuccess();
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
使用
// 生成验证码的随机值
String code = RandomUtils.getSixBitRandom();
Map<String,Object> param = new HashMap<>();
param.put("code", code);
// 调用方法,发送短信
boolean isSend = SendCodeUtils.sendCode(param,phone.trim());
三、技术使用中遇到的问题和解决过程
- 阿里短信云服务中存在分钟级、小时级以及日级限制,可能会对业务造成一定的影响。
阿里短信云服务的限制是考虑到短信的合法性、可靠性以及短信内容的安全等因素,是一个解决不了的问题,需要我们在使用过程中合理规划短信发送频率。
四、总结
阿里短信云服务提供了完整的API接口和图形化界面,方便开发人员使用。另外,阿里短信云服务提供了多种编程语言SDK,可以轻松接入各种开发语言中,满足各种开发需求。总之,阿里短信云服务简单易用,基本可以满足各种行业和业务的需求。
五、参考文献
相关推荐
SpringBoot下token短信验证登入登出权限操作(token存放redis,ali短信接口)
主要介绍了SpringBoot下token短信验证登入登出权限操作(token存放redis,ali短信接口),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
springboot入门以及短息服务源码
springboot入门demo以及使用阿里大鱼集成到短信微服务与activemq的入门案例与资源
springboot发短信的案例可运行的
是用idea开发的,有代码和red说明文档,大家导入后,再参考red就可运行,我邮件为350038760@qq.com
SpringBoot+Security 发送短信验证码的实现
springboot框架越来越流行了,而使用springboot衍生出来的很多功能我们也需要掌握,该文档是关于发送短信的文档,需要的可以下载。
Spring Boot阿里云短信:如何实现发送短信
Spring Boot阿里云短信:如何实现发送短信


