当前位置: 首页 > news >正文

java整合阿里云短信服务实现验证码功能

java要想实现短信验证码功能,需要整合第三方短信服务API,如阿里、腾讯等短信服务,本文介绍的是整合阿里云短信服务实现验证码功能

一 登录阿里云短信服务平台登记信息

首先需要登录阿里云短信服务平台注册相关信息阿里云短信服务

  1. 绑定测试手机号
    在这里插入图片描述
  2. 申请短信模版签名
    需要先添加资质
    在这里插入图片描述
    点击添加资质
    在这里插入图片描述

填写申请信息
在这里插入图片描述

审核结果需要大概两小时,会以短信形式通知结果。审核通过后,这里就有下拉选项可以选择了,然后填写其他信息,点击最下边的“提交即可”

在这里插入图片描述
等待结果即可(短信通知)
在这里插入图片描述

通过后,可以看到结果
在这里插入图片描述
点击详情可以看到短信模版
在这里插入图片描述

如果上边生成的模版不满足个人要求,可以自己再申请一个模版
在这里插入图片描述
填写模板信息
在这里插入图片描述
提交等待结果即可。通过后,点击左侧“快速学习和测试”,选择自己申请的签名和模版,“调用API发送短信”
在这里插入图片描述
修改验证码(自定义即可),点击“发起调用”
在这里插入图片描述
右侧可以看到,调用成功,并且手机收到了验证码
在这里插入图片描述

二 java代码集成阿里云短信服务发送手机验证码

登录阿里云,找到自己的access key
在这里插入图片描述
在上边这个页面,可以申请accesskey,申请后会得到自己的AccessKey ID和AccessKey Secret俩值,项目里会用到这俩值。

还是打开刚才的短信服务页面阿里云短信服务,点击下方的“调用API发送短信”
在这里插入图片描述
在右侧找到java的sdk示例
在这里插入图片描述
把示例复制到我们的idea开发工具里

在pom.xml里添加阿里云相关依赖

<!--  阿里云短信依赖  -->
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.5.16</version>
</dependency>
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>2.1.0</version>
</dependency><!-- 阿里云JSON  -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.31</version>
</dependency>

application.yml配置文件如下:

sms:keyid: LTAI....... # AccessKey ID,改为自己的值,本博客里第二章开头申请的值keysecret: YYFwh.......... # AccessKey Secret,改为自己的值,本博客里第二章开头申请的值signname:  ..... # 签名改为自己的值templatecod: SMS_4.... # 模板code,改为自己的值endpoint: dysmsapi.aliyuncs.com # 固定值
server:port: 8081 # 端口号

编写工具类

import com.alibaba.fastjson.JSON;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.util.HashMap;
@Component
public class AliyunSmsUtil {@Value("${sms.keyid}")private String accessKeyId;@Value("${sms.keysecret}")private String accessKeySecret;@Value("${sms.signname}")private String signName;@Value("${sms.templatecod}")private String templateCode;@Value("${sms.endpoint}")private String endpoint;public boolean sendSms(String phoneNumber, HashMap<String, Object> templateParams) {try {DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);IAcsClient client = new DefaultAcsClient(profile);SendSmsRequest request = new SendSmsRequest();request.setPhoneNumbers(phoneNumber);request.setSignName(signName);request.setTemplateCode(templateCode);// 将HashMap转化为JSON字符串String templateParam = JSON.toJSONString(templateParams);request.setTemplateParam(templateParam);SendSmsResponse response = client.getAcsResponse(request);return "OK".equals(response.getCode());} catch (ClientException e) {e.printStackTrace();return false;}}
}

程序入口controller

import com.example.sms.AliyunSmsUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;@RestController
@RequestMapping("/ss")
public class TsController {@Autowiredprivate AliyunSmsUtil aliyunSmsUtil;@GetMapping("/send2")public String sendCode2(String phone) {//验证码。正常业务中,这里要生成随机数,并且存到redis里,在redis里设置过期时间,如5分钟//手机号作为key,生成的验证码为valueString random = "0211";HashMap<String, Object> hashMap = new HashMap<>();hashMap.put("code", random);// 4. 调用阿里云接口发送短信,将验证码发送给指定的手机号码boolean b = aliyunSmsUtil.sendSms(phone, hashMap);System.out.println("短信发送状态:" + b);if(b){return "success";}else {return "fail";}}
}

测试:
在这里插入图片描述
手机也能收到验证码了。


文章转载自:

http://izw9Eu6V.ntyrr.cn
http://InxhwQiA.ntyrr.cn
http://afTNV9lE.ntyrr.cn
http://w9eNLQUS.ntyrr.cn
http://anlgyxRJ.ntyrr.cn
http://c2HWXDjJ.ntyrr.cn
http://LdWUfzI9.ntyrr.cn
http://vnxD4n6W.ntyrr.cn
http://kwaAarGm.ntyrr.cn
http://LbwGiFbh.ntyrr.cn
http://5g1USyEE.ntyrr.cn
http://Z1lZ6THe.ntyrr.cn
http://9qHUPrKX.ntyrr.cn
http://eSomstCl.ntyrr.cn
http://C3wSwKrs.ntyrr.cn
http://U06IYfqQ.ntyrr.cn
http://FDV32P0T.ntyrr.cn
http://oSFeqeHg.ntyrr.cn
http://MRIrXyyE.ntyrr.cn
http://oQPZohDk.ntyrr.cn
http://47SapJRz.ntyrr.cn
http://6zm7ilSo.ntyrr.cn
http://ithn3JJf.ntyrr.cn
http://4pau6HPT.ntyrr.cn
http://gEfOGRHx.ntyrr.cn
http://5dndBtda.ntyrr.cn
http://t1H9eYLm.ntyrr.cn
http://D8M5FMCw.ntyrr.cn
http://AtYyilsh.ntyrr.cn
http://k9M8zLJg.ntyrr.cn
http://www.dtcms.com/a/380555.html

相关文章:

  • Excel转图片excel2img库bug修复:AttributeError ‘parent‘ 问题解决方案
  • 【秋招笔试】2025.09.10华为ai算法岗笔试真题
  • 【深度学习-Day 47】告别单向依赖:深入解析双向RNN与堆叠RNN,解锁序列建模新高度
  • 为Excel和WPS表格多个不连续单元格设置同样的批注
  • 【Vite】打包优化
  • 3 遥感与机器学习
  • 汽车功能安全 Functional Safety ISO 26262 测试之一
  • 第八章 惊喜08 减负
  • Redis 持久化详解:RDB 与 AOF 原理、配置及选型
  • MySQL 索引学习全景笔记
  • Ethernaut Foundry Solutions - 完整系列教程
  • 【ARDUINIO】从串口读取数据的方法总结
  • Redis环境搭建指南:Windows/Linux/Docker多场景安装与配置
  • 如何使用 Linux ping 命令 ?
  • 分布式专题——10.3 ShardingSphere实现原理以及内核解析
  • 神经网络稀疏化设计构架方法和原理深度解析
  • 10-SpringBoot入门案例(下)
  • ⽹络请求Axios的概念和作用
  • 缓存三大劫攻防战:穿透、击穿、雪崩的Java实战防御体系(三)
  • 认知语义学对人工智能自然语言处理的深层语义分析:理论启示与实践路径
  • 快速搭建B/S架构HTML演示页:从工具选择到实战落地
  • Git 简介
  • Java 中 Word 文档的加密与解密
  • SAM-Med3D:面向三维医疗体数据的通用分割模型 (代码仓库笔记)
  • 嵌入式桌面集成 · GNOME 与 Yocto 在 Jetson AGX Orin 上的实战指南
  • Model Context Protocol (MCP) 安全风险与攻击方式解析
  • 计算机毕业设计 基于大数据技术的医疗数据分析与研究 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
  • 单片机烧录原理是怎样的?辉芒微单片机烧录程序步骤教程如下
  • CI/CD流水线优化实战:从30分钟到5分钟的效能革命
  • 融智学:构建AI时代学术的新范式