使用阿里云发送短信验证码

news2025/1/15 19:42:36

目录

一、用户注册登录流程 

二、使用阿里云发送短信验证码

⭐生成密钥 

⭐将密钥配置到项目中

⚪新建properties文件并填入相应信息

⚪pom配置

​⚪ 测试代码

⚪添加签名

​⚪添加短信发送的模板

💧验证码防盗刷监控


一、用户注册登录流程 

二、使用阿里云发送短信验证码

阿里云-搜索推荐 (aliyun.com)

进入控制台查看购买的短信的详细信息 

⭐生成密钥 

密钥管理(Access key)

点击Access key进入密钥管理界面

点击创建AccessKey

新建一个密钥

⭐将密钥配置到项目中

⚪新建properties文件并填入相应信息

配置的信息分别对应:

可以在生产时下载的文件中直接查看 

⚪pom配置

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>4.6.0</version>
</dependency>

⚪ 测试代码

  • 配置类
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;


@Component
classpath:aliyun.properties 注意不要加空格
@PropertySource("classpath:aliyun.properties")
//前缀
@ConfigurationProperties(prefix = "aliyun")
public class AliyunResource {
    private String accessKeyID;
    private String accessKeySecret;

    public String getAccessKeyID() {
        return accessKeyID;
    }

    public void setAccessKeyID(String accessKeyID) {
        this.accessKeyID = accessKeyID;
    }

    public String getAccessKeySecret() {
        return accessKeySecret;
    }

    public void setAccessKeySecret(String accessKeySecret) {
        this.accessKeySecret = accessKeySecret;
    }
}
  • 用官网给的测试代码进行测试

需要注意的参数

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.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import com.imooc.utils.extend.AliyunResource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class SMSUtils {
    @Autowired
    public AliyunResource aliyunResource;

    public void sendSMS(){
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou",
                aliyunResource.getAccessKeyID(),
                aliyunResource.getAccessKeySecret());
        IAcsClient client = new DefaultAcsClient(profile);
        SendSmsRequest request = new SendSmsRequest();
        request.setSignName("阿里云短信测试");
        request.setTemplateCode("SMS_154950909");
        request.setPhoneNumbers("1234567890");
        request.setTemplateParam("{\"code\": \"" + code + "\"}");
        try {
            SendSmsResponse response = client.getAcsResponse(request);
            System.out.println(new Gson().toJson(response));
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }
    }
}

⚪添加签名

⚪添加短信发送的模板

  • PassportControllerApi  
import com.imooc.grace.result.GraceJSONResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;


@Api(value = "用户注册登录",tags ={"用于用户注册登录的controller"})
public interface PassportControllerApi {
    /**
     * 获得短信验证码
     * @return
     */
    @ApiOperation(value = "获得短信验证码",notes = "获得短信验证码",httpMethod = "GET")
    @GetMapping("/getSMSCode")
    public GraceJSONResult getSMSCode();
}
  • PassportController  
import com.imooc.api.controller.user.PassportControllerApi;
import com.imooc.grace.result.GraceJSONResult;
import com.imooc.utils.SMSUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PassportController implements PassportControllerApi {

    final static Logger logger = LoggerFactory.getLogger(PassportController.class);

    @Autowired
    private SMSUtils smsUtils;

    @Override
    public GraceJSONResult getSMSCode() {
        String random = "5201314";
        smsUtils.sendSMS("17829172045","5201314");
        return GraceJSONResult.ok();
    }
}

 运行主启动类,访问地址,完成短信发送

💧验证码防盗刷监控

如果开启,这也会可能成为测试时验证码发送失败的原因

 

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

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

相关文章

Linux服务器更改ssh连接端口

更改ssh连接端口 输入vim /etc/ssh/sshd_config编辑sshd配置 在键盘上按“I”键&#xff0c;进入编辑状态 添加新的远程服务端口&#xff0c;以 222 端口为例。在Port 22下面添加输入Port 222 建议&#xff1a;不要直接修改 22 端口&#xff0c;把Port 22前面的注释符号#删除…

股票买卖Ⅴ

题目描述 给定一个长度为 NNN 的数组&#xff0c;数组中的第 iii 个数字表示一个给定股票在第 iii 天的价格。 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;: 你不能同时参与多笔交…

高精地图_语义地图_众包地图相关论文笔记

1.20220618_LT-mapper: A Modular Framework for LiDAR-based Lifelong Mapping 20213d-Lidar构建long-term地图分为 SLAM模块&#xff08;每个session的点云地图通过关键帧构建&#xff0c;对不同session的关键帧进行anchor node检测&#xff0c;基于anchor帧构建的闭环因子实…

VSCode中Java程序入口的数据输入流的常用形式

1.前言 VSCode需要配置好Java环境&#xff0c;配置链接按官网教程即可&#xff1a;Getting Started with Java in Visual Studio Code VSCode目录./vscode下文件说明如下&#xff1a; setting.json &#xff1a; 配置vscode编辑器特性配置&#xff0c;同时基础Java Project中…

如何避免缓存穿透、缓存击穿、缓存雪崩?

缓存雪崩&#xff1a; 缓存雪崩是指缓存同⼀时间⼤⾯积的失效&#xff0c;所以&#xff0c;后⾯的请求都会落到数据库上&#xff0c;造成数据库短时间内承受⼤量请求⽽崩掉。解决方案&#xff1a; 缓存数据的过期时间设置随机&#xff0c;防⽌同⼀时间⼤量数据过期现象发⽣。…

微信小程序接入火山引擎埋点数据

1&#xff0c;文档中心-火山引擎 2&#xff0c;文档中心-火山引擎 3&#xff0c;文档中心-火山引擎 上面的链接是三个最重点的部分。 首先按照1的步骤安装SDK。npm install datarangers/sdk-mp 配置合法域名将https://mcs.volceapplog.com添加到小程序后台的“request合法域…

你能懂的 Reflect 反射

你能懂得 JS 之 Reflect 反射 上一篇文章《Proxy 代理对象使用详解即原理总结》我们详细介绍了 Proxy 代理对象的使用及其工作原理&#xff08;不了解的同学可以去看看哦&#xff09;&#xff0c;今天我们来聊聊它的好兄弟 Reflect 反射。 特点 Reflect 是一个内置全局对象&a…

[go学习笔记.第十六章.TCP编程] 4.项目-海量用户即时通讯系统-显示在线用户列表,群聊

1.实现功能-完成登录时能返回当前在线用户 用户登录后,可以得到当前在线用户列表 示意图如下: 步骤: (1).编写了server/processBlock/userManager.go package processBlockimport ("fmt" )//因为UserManager实例在服务器中有且只有一个,并且在很多地方都要使用,因…

博客系统前端页面

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 博客系统 前言 一.预期效果 博客列表页效果 博客正文页效果 博客登录页效果 博客编辑页效果 二.实现博客列表页 实现导航栏 实现版心 实现个人信息 …

【DELM分类】基于matlab麻雀搜索算法改进深度学习极限学习机数据分类【含Matlab源码 2235期】

⛄一、麻雀搜索算法改进深度学习极限学习机数据分类 1 深度极限学习机 深度极限学习机算法(Deep Extreme Learning Machine, DELM)又称多层极限学习机.存在N个训练样本&#xff0c;其中 2 麻雀搜索算法(SSA) 2020年&#xff0c;薛建凯等人提出了麻雀搜索算法.麻雀搜索算法是一…

python判断语句

一、布尔类型和比较运算符 布尔类型 只有两个结果 是 / 否 定义变量存储布尔类型数据&#xff1a; 变量名称布尔类型字面量 布尔类型的数据不仅可以通过定义得到也可以通过比较运算符比较内容得到 比较运算符&#xff1a; 二、if判断语句基本格式 程序中的判断&#…

如何鉴别一个成功的Scrum 教练?

成功的Scrum教练&#xff1a;如何鉴别一个成功的Scrum教练&#xff1f;了解更多关于优秀的Scrum专家的特征。 前言: 成功的Scrum 教练 - 我认为的九大标准 如何判别Scrum 教练是否是合格的&#xff1f;Scrum 教练成功的标准是什么&#xff1f;经常使用Confluence回顾性模板是不…

java创建线程的方式到底有几种?(详解)

创建线程的方式到底有几种&#xff1f;一&#xff0c;创建多线程的方式1&#xff0c;官方解释2&#xff0c;实现Runnable接口3&#xff0c;继承Thread类3&#xff0c;二者区别3.1&#xff0c;本质区别3.2&#xff0c;优先考虑使用第一种二&#xff0c;误以为是创建线程的几种新…

react(子传父、父传子)

目录 1. 父传子 数组/对象 的两种写法 2. 子传父&#xff1a; 3. 生成唯一id的库&#xff1a; 4. 对接收的组件进行验证 1. 父传子 数组/对象 的两种写法 function App() {const obj [{age:19},{age:19}]return (<div className"App"><header classNa…

Jmeter常用参数化技巧总结

说起接口测试&#xff0c;相信大家在工作中用的最多的还是Jmeter。 JMeter是一个100&#xff05;的纯Java桌面应用&#xff0c;由Apache组织的开放源代码项目&#xff0c;它是功能和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA 等多种协议。 在做…

uniapp之使用map组件显示接收过来的经纬度

目录 前言 效果图 提示 总代码 分析 1.显示自己位置的属性 2.markers 点标记 前言 由于项目的需求&#xff0c;我需要从主页面接收经纬度&#xff0c;并渲染至地图上面&#xff0c;同时呢&#xff0c;也要在该位置上显示图标标记点&#xff08;红色&#xff09;&#x…

兴业数金 测试 面试真题|面经

兴业数金测试服务中心技术面&#xff08; 一面二面&#xff09; 时间线流程 8.12一面&#xff08;30min&#xff09;->8.31邮件通知二面&#xff0c;填写职位申请表->9.2二面&#xff08;25min&#xff0c;二面需要用小鱼易连&#xff0c;需提前下载和注册&#xff09; …

儿童台灯怎么选对眼睛最好?2022年的现在如何挑选儿童台灯呢

儿童台灯选择首要考虑因素就是护眼&#xff0c;而是否护眼&#xff0c;可以从以下几个角度去看。 一、照度。根据国家标准划分&#xff0c;照度可分为国A和国AA两级&#xff0c;它们可以衡量光线明亮程度和均匀程度&#xff0c;儿童台灯选择国AA级对眼睛最好。 二、显色指数。…

Java#19(面向对象三大特征之一:多态)

目录 一.多态 二.多态中调用成员的特点 三.instanceof关键字 一.多态 多态:同类型的对象,表现出的不同形态 格式:父类类型 对象名称 子类对象; 前提: (1)有继承关系 (2)有父类引用指向子类对象 (3)有方法重构 优点: (1)使用父类作为参数,可以接收所有子类对象 (2)体现多态的…

科技金融企业助力乡村振兴,能有多大新意?

最近几年&#xff0c;越来越多科技互联网企业开始承担起他们的社会责任&#xff0c;成为乡村振兴领域一股不可忽视的力量。作为电商平台&#xff0c;阿里、拼多多、京东助力农产品上行&#xff0c;解决农产品的销售难题&#xff0c;直接为乡村振兴领域做出大贡献&#xff0c;但…