SpringBoot集成阿里云短信验证码服务

一:前言

        最近在项目开发过程中,需要去写一个发送手机短信验证码的功能。在网上查了一下,有很多服务器可供选择,本文的话是基于阿里云服务的短信验证码功能实现。

        关于注册和开通服务这些需要操作的,请各位小伙伴参考官方文档:

使用OpenAPI调试短信服务_短信服务(SMS)-阿里云帮助中心使用OpenAPI自动化集成短信服务,可以提升您使用短信服务的开发效率。本文介绍使用OpenAPI调试短信服务的基本信息及注意事项。icon-default.png?t=N7T8https://help.aliyun.com/zh/sms/developer-reference/using-openapi?spm=a2c4g.11186623.0.i1        开通完成后,我们至少需要下图中的四个字段,这里我罗列出来,缺少这些东西的小伙伴请根据文档来补全。

二:代码

1、导入依赖

        在 SpringBoot项目中的 pom.xml 文件中导入依赖

        <!-- 集成阿里云短信服务 --><dependency><groupId>com.aliyun</groupId><artifactId>dysmsapi20170525</artifactId><version>2.0.24</version></dependency>

2、创建变量

        为了数据的安全,防止攻击,我们可以进入 application.yml 文件配置全局变量,我这里的缩进如下:

3、实现代码

        1)在 Controller 中获取到这些变量

    @Value("${sofast.password.smsCode.accessKeyId}")private String accessKeyId;@Value("${sofast.password.smsCode.accessKeySecret}")private String accessKeySecret;@Value("${sofast.password.smsCode.signName}")private String signName;@Value("${sofast.password.smsCode.templateCode}")private String templateCode;

        2)这里我们来写两个前置方法

        生成四位随机数的方法,非常简单,可以根据自己的需求和短信模板进行修改。

    public static String generateCode() {Random random = new Random();int code = random.nextInt(9000) + 1000;return String.valueOf(code);}

        初始化账号的方法,这个是直接从官网上拿过来的

    public com.aliyun.dysmsapi20170525.Client createClient() throws Exception {// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。.setAccessKeyId(accessKeyId)// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。.setAccessKeySecret(accessKeySecret);// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapiconfig.endpoint = "dysmsapi.aliyuncs.com";return new com.aliyun.dysmsapi20170525.Client(config);}

        3)接口主方法

        这个是方法的主要执行体,我们定义了一个接口,后续直接往这个接口传一个手机号的字符串就行了,要注意的是,我们可以不在这里进行手机号格式的判断,因为在阿里云服务器端,会进行判断,图省事的小伙伴可以直接将返回的提示传给前端就可以啦!

@GetMapping("/verification/sendSmsCode/{phone}")@DynamicDS(value = DataSourceType.SLAVE)@ApiOperation("发送短信验证码")public R  sendSmsCode(@PathVariable("phone") @NotNull String phone) throws Exception {String code = generateCode();SendSmsResponse sendSmsResponse = new SendSmsResponse();com.aliyun.dysmsapi20170525.Client client = createClient();com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest().setPhoneNumbers(phone).setSignName(signName).setTemplateCode(templateCode).setTemplateParam("{\"code\":\""+code+"\"}");try {// 复制代码运行请自行打印 API 的返回值sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, new 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 R.data(sendSmsResponse.body.message);}

4、效果

接口返回值:

手机收到的短信:

三:结尾

        上述是SpringBoot集成阿里云短信服务的详细代码,其实现逻辑是非常简单的,当然比较繁琐的一块在服务的开通,模板的定义这里。不过按照官方文档一步一步来,大多数的小伙伴都是没问题的,因此本文不再赘述。好啦,希望能够对各位小伙伴有所帮助哦!

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

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

相关文章

Sprd Android 13 增加系统属性判断当前有无 OTG U盘插入,App 读取系统属性

添加系统属性,通过监听插拔广播判断当前有无OTG U盘插入 --- a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -246,6 +246,7 @@ …

Burp和Proxifier抓包微信小程序

1、Burp设置代理 2、浏览器下载证书 3、安装证书 4、Proxifier设置代理 5、Proxifier设置Proxification Rule 6、Burp查看抓包数据 打开一个小程序&#xff0c;可以看到WeChatAppEx的流量先经过Proxifier&#xff0c;再经过127.0.0.1:8080到Burp

JL-31 管式墒情记录仪

产品概述 管式墒情记录仪能够针对不同土层的土壤水分含量进行动态观测&#xff0c;可以同时检测记录土壤温度和水壤水分的变化&#xff0c;采用分层设点的观测结构&#xff0c;地面配置一个温度观测点&#xff0c;地下土壤每隔10cm配置一个土壤温湿测点&#xff0c;观测相对应…

CWDM、DWDM、MWDM、LWDM:快速了解光波复用技术

在现代光纤通信领域&#xff0c;波分复用&#xff08;WDM&#xff09;技术作为一项先进的创新脱颖而出。它通过将多个不同波长和速率的光信号汇聚到一根光纤中来有效地传输数据。本文将深入探讨几种关键的 WDM 技术&#xff08;CWDM、DWDM、MWDM 和 LWDM&#xff09;&#xff0…

字节8年经验之谈 —— 手把手教你做测试流程优化!

一、需求阶段 1. 梳理提需求流程 &#xff08;1&#xff09;规范需求list时间 有些团队可能会今天提一个需求&#xff0c;明天提一个&#xff1b;可以制定一个每周过需求list的时间&#xff0c;统一安排过本周的需求&#xff0c;并对需求进行优先级排序&#xff0c;开发和QA…

Android 状态栏WiFi图标的显示逻辑

1. 状态栏信号图标 1.1 WIFI信号显示 WIFI信号在状态栏的显示如下图所示 当WiFi状态为关闭时&#xff0c;状态栏不会有任何显示。当WiFi状态打开时&#xff0c;会如上图所示&#xff0c;左侧表示有可用WiFi&#xff0c;右侧表示当前WiFi打开但未连接。 当WiFi状态连接时&#x…

创造未来知识管理新篇章:Ollama与AnythingLLM联手打造个人与企业的安全知识库!

一 Ollama 1.1 简介 Ollama是一个开源的大型语言模型服务工具,它帮助用户快速在本地运行大模型。通过简单的安装指令,用户可以执行一条命令就在本地运行开源大型语言模型,如Llama 2。Ollama极大地简化了在Docker容器内部署和管理LLM的过程,使得用户能够快速地在本地运行大…

Vite构造Vue3

环境安装 node.js安装-CSDN博客 初始化Vue项目安装脚手架_vue init webpack安装脚手架-CSDN博客 选择Vue框架 &#xff0c;项目名称可以自定义&#xff0c;我使用默认的 vite-project 选择JS 进入项目安装依赖 安装路由

Linux服务器常用巡检命令

在Linux服务器上进行常规巡检是确保服务器稳定性和安全性的重要措施之一。以下是一些常用的巡检命令和技巧&#xff1a; 1. 查看系统信息 1.1 系统信息显示 命令&#xff1a;uname -a ​​​​ [rootlinux100 ~]# uname -a Linux linux100 4.15.0-70-generic #79-Ubuntu SMP…

代码随想录算法训练营Day30 | 332.重新安排行程 51. N皇后 37. 解数独 总结

代码随想录算法训练营Day30 | 332.重新安排行程 51. N皇后 37. 解数独 总结 回溯总结 回溯解决的问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合 排列问题&#xff1a;N个数按一定规则全排列&#xff0c;有几种排列方式 切割问题&#xff1a;一个…

头歌-java编程基础

第一关关键字 package step1; public class KeyWord {public static void main(String[] args) {System.out.println("Hello world!");} } 第二关 标示符 package step2;public class Identifier {public static void main(String[] args) {/********* Begin ***…

对软件测试的一些了解

一、什么是软件测试 1.生活中的测试场景&#xff1a; 例如&#xff1a;买衣服的案例&#xff1a;保暖性&#xff0c;时尚&#xff0c;大小&#xff0c;穿上显瘦&#xff0c;价格 2.测试的定义&#xff1a;测试人员验证软件是否符合需求的这个过程就是测试 3.为什么要有测试&…

python中的isdecimal函数

在Python中&#xff0c;字符串对象有一个方法叫做 isdecimal()。这个方法用于检查字符串中的所有字符是否都是十进制数字&#xff08;0-9&#xff09;。如果字符串中的所有字符都是十进制数字&#xff0c;并且字符串至少包含一个字符&#xff0c;那么 isdecimal() 方法将返回 T…

mac自定义快捷键打开系统应用

最终效果是达成altg直接打开浏览器&#xff0c;解放双手、再也不需要移动鼠标双击打开应用啦&#xff01;&#xff01;&#xff01;&#xff5e; 1.commandspace输入自动操作 2.选择快速操作 3.选择使用工具、运行appleScrpit 4.输入打开浏览器代码 tell application "G…

2024数维杯数学建模B题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

【算法系列】栈

目录 leetcode题目 一、删除字符串中的所有相邻重复项 二、比较含退格的字符串 三、基本计算器 II 四、字符串解码 五、验证栈序列 六、有效的括号 七、最小栈 八、逆波兰表达式求值 九、用栈实现队列 十、用队列实现栈 leetcode题目 一、删除字符串中的所有相邻重…

数据结构-二叉树-二叉搜索树

一、概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左树上所有节点的值都小于根节点的值。 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值。 它…

2024年 Java 面试八股文——SpringCloud篇

目录 1.Spring Cloud Alibaba 中的 Nacos 是如何进行服务注册和发现的&#xff1f; 2.Spring Cloud Alibaba Sentinel 的流量控制规则有哪些&#xff1f; 3.Spring Cloud Alibaba 中如何实现分布式配置管理&#xff1f; 4.Spring Cloud Alibaba RocketMQ 的主要特点有哪些&…

干货 | 嵌入式OTA升级实现原理

我曾经一个经理&#xff0c;被老板骂到狗血淋头的场景&#xff0c;还历历在目。 原因是&#xff0c;产品大批量出货了&#xff0c;发现了一个偶发性的BUG。 这意味着&#xff0c;所有卖出去的产品&#xff0c;都得退回来&#xff0c;重新烧录程序。 估计当时经理在想&#xff0…

fork后如何同步最新的代码

1.查看自己的库并添加远程源库 #查看所有远程库的url git remote -v; #添加源项目url&#xff08;upstream是自己定义的一个名字&#xff0c;可以删 git remote remove upstream&#xff09; git remote add upstream 这里替换为源项目url; #查看所有远程库的url&…