SpringBoot集成阿里云短信实现发送短信验证码

SpringBoot集成阿里云短信实现发送短信验证码

  • 一、准备工作
    • 1、注册账号
    • 2、申请资质
    • 3、申请签名
    • 4、创建模板
  • 二、springboot集成发送短信
    • 1、引入依赖
    • 2、编写短信配置文件
    • 3、编写短信发送工具类

一、准备工作

在使用springboot集成短信服务之前,需要先注册阿里云的账号(实名认证),然后申请短信资质、签名以及短信模板。

1、注册账号

点击阿里云注册账号,如下所示
image.png
两种注册方式任选即可,注册后需要实名认证(可以通过支付宝扫码认证),这里省略实名认证的过程。
实名认证之后,直接在搜索框搜索短信服务即可,然后申请资质和签名以及模板

2、申请资质

  1. 点击新增资质

image.png

  1. 填写信息

image.png
用途根据自己需要选择,我这里是自用,然后输入资质命名,并按照要求上传身份证照片。
申请签名的时候需要用到资质。

3、申请签名

image.png
点击新建签名,然后根据下图填写信息
image.png

4、创建模板

image.png
点击创建模板,然后根据下面的信息填写,也可以去网上查找相应的模板
image.png

之后等待申请通过即可。等申请通过后就可以购买短信,然后通过调用api进行发送短信。一般新用户可以试用100条短信

二、springboot集成发送短信

1、引入依赖

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

2、编写短信配置文件

# 阿里云短信服务配置
aliyun:sms:accessKeyId:         # 填你的accesskeyidaccessKeySecret:     # 填 accesskeySecretsignName:            # 填写签名名称templateCode:        # 填写模板的code

这里需要先在阿里云控制台获取上面的四项配置,如下所示:

  1. 获取accessKeyId和accessKeySecret,如下所示,点击Accesskey管理

image.png

  1. 如下所示,如果想要使用子用户的话,需要创建一个子用户,跟着操作和提示创建即可。也可以选择继续使用accesskey,最终获取的方式差不多。

image.png

  1. 我这里没有创建子用户,直接使用的accesskey,如下所示,直接点击创建accesskey,然后任选一种验证方式即可

image.png

  1. 然后将创建的accessKeyId,accessKeySecret分别粘贴到对应的配置文件的位置中即可。
  2. 然后复制签名的名称,粘贴到配置文件中的相应位置如下所示:

image.png

  1. 然后点击模板管理,粘贴你对应的模板的code即可,如下所示

image.png
这里配置文件的配置就结束了。

3、编写短信发送工具类

然后编写发短信的工具类,如下所示:

@Service
@slf4j
public class AliSmsUtils{@Value("${aliyun.sms.accessKeyId}")private  String accessKeyId;@Value("${aliyun.sms.accessKeySecret}")private  String accessKeySecret;@Value("${aliyun.sms.signName}")private  String signName;//模板代码@Value("${aliyuan.sms.templateCode}")private String templateCode;private String templateParam;/*** 使用AK&SK初始化账号Client* @return Client* @throws Exception*/public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()// 必填,您的 AccessKey ID.setAccessKeyId(accessKeyId)// 必填,您的 AccessKey Secret.setAccessKeySecret(accessKeySecret);// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapiconfig.endpoint = "dysmsapi.aliyuncs.com";return new com.aliyun.dysmsapi20170525.Client(config);}@Overridepublic boolean sendSms(String phone, String code) throws Exception {log.info("发送短信验证码: " + code);// 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.htmlcom.aliyun.dysmsapi20170525.Client client = SmsServiceImpl.createClient(accessKeyId, accessKeySecret);com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest().setPhoneNumbers(phone).setTemplateCode(templateCode).setTemplateParam(code).setSignName(signName);try {// 复制代码运行请自行打印 API 的返回值client.sendSmsWithOptions(sendSmsRequest, new com.aliyun.teautil.models.RuntimeOptions());} catch (TeaException error) {// 错误 messageSystem.out.println(error.getMessage());// 诊断地址System.out.println(error.getData().get("Recommend"));com.aliyun.teautil.Common.assertAsString(error.message);} catch (Exception _error) {TeaException error = new TeaException(_error.getMessage(), _error);// 错误 messageSystem.out.println(error.getMessage());// 诊断地址System.out.println(error.getData().get("Recommend"));com.aliyun.teautil.Common.assertAsString(error.message);}return true;}
}

说明:

  • 上面的的代码是我直接在Service中以方法的方式实现的,所以可以根据自己需要进行修改
  • 而且上面的方式是根据官网的demo进行修改的,想要进一步了解如何使用则可以在官网查看。
  • 上面的是直接通过@Value注解获取配置文件中的内容,你也可以通过@ConfigurationProperties注解实现,或者结合nacos配置中心实现获取远程配置中的值。

调用上面的方法需要两个参数,一个是手机号,一个是验证码,所以对于该业务需要注意手机号的格式验证(使用正则表达式),和随机验证码的生成(可以使用hutool中的随机数生成,也可以采用获取UUID中的几位作为验证码)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware vSphere运维管理手册

适用版本:VMware vSphere 7.0 VMware vSphere 是 VMware 的虚拟化平台,可将数据中心转换为包括 CPU、存储和网络资源的聚合计算基础架构。vSphere 将这些基础架构作为一个统一的运行环境进行管理,并为您提供工具来管理加入该环境的数据中心。 ![[Pasted image 20231212132…

uni-app的学习【第二节】

四 路由配置及页面跳转 (1)路由配置 uni-app页面路由全部交给框架统一管理,需要在pages.json里配置每个路由页面的路径以及页面样式(类似小程序在app.json中配置页面路由) (2)路由跳转 uni-app有两种页面路由跳转方式:使用navigator组件跳转(标签式导航)、调用API跳…

比亚迪:从低谷中涅槃,内功造就辉煌

修炼内功才能绽放光芒吗? 比亚迪用自己的奋斗史证明~ 只有经历低谷的洗礼&#xff0c;才能铸就属于自己的辉煌。 比亚迪这家公司的发展历程可谓是一部从战略转型到今天这个行业翘楚的奋斗史&#xff0c;真是跌宕起伏令人唏嘘。早期比亚迪从一个传统企业转型到汽车行业&#xf…

电源模块常见温升测试方法分享 -纳米软件

温升测试是电器产品安规测试项目之一&#xff0c;是为了检测电器产品及部件的温度变化情况&#xff0c;判断是否符合要求。在设备运行过程中会释放一定的热量&#xff0c;如果内部温度过高会影响产品的性能和稳定性&#xff0c;导致绝缘性能下降&#xff0c;因此温升测试是确保…

sshpass 命令exit code 6 问题解决方法

近期在使用sshpass做自动化交互的脚本&#xff0c;结果运行命令后会返回错误码6,命令如下&#xff1a; sshpass -p 123456 ssh test192.168.1.100 "uname -a" 经搜索资料发现&#xff0c;错误码6指的是Host public key is unknown&#xff0c;也就是说要访问的地址是…

股东分红模式玩法解析!

股东分红模式股东分红模式是指公司通过向股东支付现金或股票的方式&#xff0c;将公司利润分配给股东的一种方式。不同的股东分红模式有着不同的特点和应用场景。 ​一、模式概述 一个私域电商平台&#xff0c;非常重要的一个角色是“团队长”&#xff0c;尤其是能够带动业绩和…

MoE模型性能还能更上一层楼?一次QLoRA微调实践

Fine-Tuning Mixtral 8x7B with QLoRA&#xff1a;Enhancing Model Performance &#x1f680; 编者按&#xff1a;最近&#xff0c;混合专家(Mixture of Experts,MoE)这种模型设计策略展现出了卓越的语言理解能力&#xff0c;如何在此基础上进一步提升 MoE 模型的性能成为业界…

Win10子系统Ubuntu实战(二)

在 Windows 10 中安装 Ubuntu 子系统&#xff08;Windows Subsystem for Linux&#xff0c;简称 WSL&#xff09;有几个主要的用途和好处&#xff1a;Linux 环境的支持、跨平台开发、命令行工具、测试和验证、教育用途。总体而言&#xff0c;WSL 提供了一种将 Windows 和 Linux…

使用python执行系统命令的五种方式

在日常开发中&#xff0c;有时需要在Python脚本中执行系统命令&#xff0c;Python有五种方式来执行系统命令&#xff0c;推荐使用第五种。 python执行系统命令的五种方式 方法1: os.system 这是最简单的方法&#xff0c;适合简单的业务场景&#xff0c;输入为完整命令字符串…

【IP-Adapter】进阶 - 同款人物【2】 ☑

测试模型&#xff1a;###最爱的模型\flat2DAnimerge_v30_2.safetensors [b2c93e7a89] 原图&#xff1a; 加入 control1 [IP-Adapter] 加入 control 2 [OpenPose] 通过openpose骨骼图修改人物动作。 加入 control 3 lineart 加入cotrol3 …

【LV12 DAY13 UART 串口通信】

UART–&#xff08;一种通信协议&#xff09; 通用异步收发器&#xff0c;是一种通用的串行&#xff0c;异步通信总线&#xff0c;该总线有两条数据线&#xff0c;可以实现全双工的发送和接收&#xff0c;在嵌入式系统中常用于主机与辅助设备之间的通信。 波特率 波特率用于描…

1.10 Unity中的数据存储 JSON

一、介绍 Json是最常用也是目前用的比较多的一种&#xff0c;超轻量级&#xff0c;可便捷性使用&#xff0c;平时用到比较多的都是解析Json和往Json中添加数据、修改数据等等JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式&#xff0c;它基于ECMAScr…

Leetcode18-算术三元组的数目(2367)

1、题目 给你一个下标从 0 开始、严格递增 的整数数组 nums 和一个正整数 diff 。如果满足下述全部条件&#xff0c;则三元组 (i, j, k) 就是一个 算术三元组 &#xff1a; i < j < k &#xff0c; nums[j] - nums[i] diff 且 nums[k] - nums[j] diff 返回不同 算术三…

PR-视频去水印

文章目录 前言PR-视频去水印实现示例 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&#xff0c;那欢迎常来啊!!! PR-视频…

python绘制热力图-数据处理-VOC数据类别标签分布及数量统计(附代码)

前言 当你需要统计训练数据中每个类别标签有多少&#xff0c;并且想知道坐标中心分布在图像的位置信息时&#xff0c;你可以利用一下脚本进行计算&#xff01; 步骤 要绘制热力图来分析VOC数据的分布统计&#xff0c;可以按照以下步骤进行&#xff1a; 数据处理&#xff1…

XCTF:MISCall[WriteUP]

使用file命令&#xff0c;查看该文件类型 file d02f31b893164d56b7a8e5edb47d9be5 文件类型&#xff1a;bzip2 使用bzip2命令可对该文件进行解压 bzip2 -d d02f31b893164d56b7a8e5edb47d9be5 生成了一个后缀为.out的文件 再次使用file命令&#xff0c;查看该文件类型 file…

缓存代理服务器

1 缓存代理 1.1 缓存代理的概述 web代理的作用 缓存网页对象&#xff0c;减少重复请求 存储一些之前被访问的或且可能将要备再次访问的静态网页资源对象&#xff0c;使用户可以直接从缓存代理服务器获取资源&#xff0c;从而减少上游原始服务器的负载压力&#xff0c;加快整…

LeetCode刷题--- 地下城游戏

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动…

在软件测试过程中如何有效的开展接口自动化测试

一.简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中&#xff0c;通过对接口的自动化测试来提高测试效率和测试质量&#xff0c;减少人工测试的工作量和测试成本&#xff0c;并且能够快速发现和修复接口错误&#…

如何保护linux服务器远程使用的安全

服务器安全是一个非常敏感的问题&#xff0c;因服务器远程入侵导致数据丢失的安全问题频频出现&#xff0c;一旦服务器入侵就会对个人和企业造成巨大的损失。因此&#xff0c;在日常使用服务器的时候&#xff0c;我们需要采取一些安全措施来保障服务器的安全性。 目前服务器系…