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.hqwc.cn/news/339713.html

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

相关文章

vagrant 用户名密码登录

正常登录后 sudo -i 切换到root权限 vim /etc/ssh/vim sshd_config 将PasswordAuthentication no设置 为yes 重启sshd.service服务 systemctl restart sshd.service

2023年11月论文:DANCE OF CHANNEL AND SEQUENCE(CSformer)(无源码)

DANCE OF CHANNEL AND SEQUENCE: AN EFFICIENT ATTENTION-BASED APPROACH FOR MULTIVARIATE TIME SERIES FORECASTING 推荐阅读指数&#xff1a; ★★ 大意了&#xff0c;没仔细看实验结果和模型图&#xff0c;精度了一篇有点不太行的文章&#xff0c;实验结果只有一张表&…

如何在IntelliJ IDEA中配置SSH服务器开发环境并实现固定地址远程连接

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

【微服务】日志搜集es+kibana+filebeat+redis+logstash(单机)

日志搜集系统搭建 基于7.17.16版本 ps: 项目是toB的&#xff0c;日志量不大 前置准备 软件下载 7.17.16版本。8.x版本需要JDK11 elastic.co/downloads/past-releasesJDK java8 Linux elastic 软件不能以root用户启动&#xff0c;需要创建用户 sudo useradd elastic #给此…

零基础学习 AI 绘画的进阶之路!必收藏!!

手把手教你入门绘图超强的AI绘画程序&#xff0c;用户只需要输入一段图片的文字描述&#xff0c;即可生成精美的绘画。给大家带来了全新保姆级教程资料包&#xff08;文末可获取&#xff09; 计算机和绘画都是零基础的初学者——既不懂编程&#xff0c;也没有接受过任何美术方面…

Python类型转换,数据类型转换函数大全 与 strip()函数介绍

Python类型转换&#xff0c;数据类型转换函数大全 虽然 Python 是弱类型编程语言&#xff0c;不需要像 Java 或 C 语言那样还要在使用变量前声明变量的类型&#xff0c;但在一些特定场景中&#xff0c;仍然需要用到类型转换。 比如说&#xff0c;我们想通过使用 print() 函数…

牛客网-JAVA(错题集)-1

1 Java的抽象类和接口不可以进行实例化 2 知识点&#xff1a; 1、不论如何 finally里面的代码是一定会执行的 2、finally里面的代码块比return早执行 3、多个return是按顺序执行的&#xff0c;只执行一次 public abstract class Test {public static void main(String[] ar…

x-cmd pkg | ctop - 针对容器的类 top 命令

目录 介绍首次用户功能特点类似工具与竞品进一步阅读 介绍 ctop 是一个基于容器的类似 top 命令的性能监控工具&#xff0c;采用 Go 语言编写的&#xff0c;它以类似于 top 命令的方式显示运行中的容器的资源使用情况。ctop 提供了一个交互式的界面&#xff0c;可以让用户实时…

SpringMVC工作原理

文章目录 Spring MVC 概述组件介绍Spring MVC的工作原理 Spring MVC 概述 SpringMVC是一个基于MVC模式的Web框架&#xff0c;它是Spring Framework的一部分。SpringMVC主要用于在Java Web应用程序中实现Web层&#xff0c;提供了一套与平台无关的、可重用的Web组件。 Spring MV…

2024年程序员必备:掌握未来技术架构的关键方向

随着科技的飞速发展&#xff0c;程序员的角色也在不断演变。 到了2024年&#xff0c;仅仅掌握基本的编程技能已经远远不够&#xff0c;程序员必须紧跟技术潮流&#xff0c;深入理解并掌握新兴的技术架构方向&#xff0c;以确保在职场中的竞争力。本文将探讨2024年程序员必须关…

时间差异导致数据缺失,如何调整Grafana时间与Prometheus保持同步?

Grafana时间如何调快或调慢&#xff1f; 在k8s环境中&#xff0c;常使用prometheusgrafana做监控组件&#xff0c;prometheus负责采集、存储数据&#xff0c;grafana负责监控数据的可视化。 在实际的使用中&#xff0c;有时会遇到这样的问题&#xff0c;k8s集群中的时间比真实…

通义千问Qwen-72B-Chat基于PAI的低代码微调部署实践

作者&#xff1a;熊兮、求伯、一耘 引言 通义千问-72B&#xff08;Qwen-72B&#xff09;是阿里云研发的通义千问大模型系列的720亿参数规模模型。Qwen-72B的预训练数据类型多样、覆盖广泛&#xff0c;包括大量网络文本、专业书籍、代码等。Qwen-72B-Chat是在Qwen-72B的基础上…