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,一经查实,立即删除!

相关文章

Burp和Proxifier抓包微信小程序

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

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…

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&…

哪个牌子的电容笔好用?618五款爆款电容笔评测,不踩雷!

随着信息技术不断发展&#xff0c;iPad慢慢成为了现代年轻人工作、娱乐和学业的必备智能工具之一。然而&#xff0c;市场上涌现出众多品牌的电容笔&#xff0c;也存在着大量低质量的电容笔产品。这些产品往往无法达到预期的书写和绘画效果&#xff0c;反而可能导致用户体验不佳…

AI适老化!10秒一张的AI姓氏头像,居然要卖9块9?中老年用户都说好!

看短视频的你&#xff0c;一定会刷到过这样的直播间&#xff1a; 现在大家明白了&#xff0c;这是一个做姓氏图像的直播间。我刚开始刷到的时候也觉得这种头像好看&#xff0c;高大上&#xff0c;也想做一个这样的图像&#xff0c;来当自己的微信头像。 做这样的图像需要排队刷…

电脑提示msvcr100.dll丢失?五种msvcr100.dll丢失的解决方法

在使用电脑的过程中&#xff0c;我们可能会遇到各种各样的问题。其中&#xff0c;msvcr100.dll丢失是一个常见的问题。这个DLL文件是Microsoft Visual C 2015 Redistributable的一部分&#xff0c;它提供了许多重要的功能&#xff0c;包括一些运行时间库。当此DLL文件丢失时&am…

Android Kernel源码下载方法

Android Kernel的源码是git管理的&#xff0c;和之前下载的Android源码管理方式不一样&#xff0c;所以下载方式也不一样&#xff0c;直接用git下载就可以了&#xff1b;去网上搜的下载方式五花八门&#xff0c;有很多问题&#xff0c;因为服务器经常无法访问&#xff0c;也一直…

拼多多商品详情API返回值全解析

关键数据指标 成长层级&#xff1a;根据店铺近30天交易额、店铺领航员&#xff0c;综合评估得出店铺所处的成长层级 店铺综合体验星级&#xff1a;以领航员综合分为数据基础&#xff0c;同时结合店铺活跃度、行业特色服务(特色服务要求根据行业特色调整)&#xff0c;形成的店铺…

武王伐纣时杀死一位商朝大将,八百年后其子孙复仇推翻周朝

大约在公元前1046年&#xff0c;周武王率领大军征讨商朝&#xff0c;并在牧野之战中击溃商军&#xff0c;纣王兵败后自焚而死&#xff0c;至此商朝灭亡&#xff0c;史称“武王伐纣”。周武王进入朝歌城后&#xff0c;对商朝的旧臣进行了相关处理&#xff0c;有人“升职”了&…