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

集成SpringCloudAlibaba短信服务 短信验证码

1.1 SpringCloudAlibaba短信服务简介

短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力。

  • 产品优势:覆盖全面、高并发处理、消息堆积处理、开发管理简单、智能监控调度

  • 产品功能:短信通知、短信验证码、推广短信、异步通知、数据统计

  • 应用场景:短信验证码、系统信息推送、推广短信等

SpringCloudAlibaba提供的短信服务,集成更加方便,代码更加简洁。

1.2 代码解析

1.2.1 基本配置与工具类封装

(1)我们这里使用了SpringCloudAlibaba中提供的短信服务

工程引入依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alicloud-sms</artifactId><version>2.2.0.RELEASE</version>
</dependency>

(2)配置文件添加短信相关的配置,密钥的配置

spring:cloud:alicloud:access-key: XXXsecret-key: XXX

以及签名和模板号的配置(自定义)

sms:operator:signName: xxxtemplateCode: xxx

(3)SmsConfig用于读取配置文件中的签名和模板编号

package com.lkd.sms;
​
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
​
@Configuration
public class SmsConfig {@Value("${sms.operator.signName}")private String signName;@Value("${sms.operator.templateCode}")private String templateCode;
​public String getSignName() {return signName;}
​public String getTemplateCode() {return templateCode;}
}

(4)SmsSender用于封装发送短信的方法

package com.lkd.sms;
​
import com.alibaba.alicloud.sms.ISmsService;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
​
@Component
@Slf4j
public class SmsSender {@Autowiredprivate SmsConfig smsConfig;@Autowiredprivate ISmsService smsService;
​/***  发送验证码短信* @param telphone 手机号* @param code 手机验证码*/public void sendMsg(String telphone,String code){// 组装请求对象-具体描述见控制台-文档部分内容SendSmsRequest request = new SendSmsRequest();
​// 必填:待发送手机号request.setPhoneNumbers(telphone);// 必填:短信签名-可在短信控制台中找到request.setSignName(smsConfig.getSignName());// 必填:短信模板-可在短信控制台中找到request.setTemplateCode(smsConfig.getTemplateCode());// 可选:模板中的变量替换JSON串,如模板内容为"【企业级分布式应用服务】,您的验证码为${code}"时,此处的值为ObjectMapper mapper = new ObjectMapper();JsonNode rootNode = mapper.createObjectNode();((ObjectNode)rootNode).put("code",code);try {request.setTemplateParam(mapper.writeValueAsString(rootNode));//{"code":code}smsService.sendSmsRequest(request);}catch (Exception e) {log.error("send sms error.",e);}}
}

在需要发送短信的地方,直接引入SmsSender即可

1.2.2 发送短信验证码

(1)发送短信验证码, UserService定义方法

/*** 发送验证码* @param mobile*/
void sendCode(String mobile);

UserServiceImpl实现方法

@Autowired
private SmsSender smsSender;
​
@Override
public void sendCode(String mobile){if(Strings.isNullOrEmpty(mobile)) return;LambdaQueryWrapper<UserEntity> wrapper = new LambdaQueryWrapper<>();wrapper.eq(UserEntity::getMobile,mobile);if(this.count(wrapper)<=0) return;if(redisTemplate.opsForValue().get(mobile) != null) return;//生成5位验证码StringBuilder sbCode = new StringBuilder();Stream.generate( ()-> new Random().nextInt(10)).limit(5).forEach(x-> sbCode.append(x));redisTemplate.opsForValue().set(mobile,sbCode.toString(), Duration.ofMinutes(5));smsSender.sendMsg(mobile,sbCode.toString());
}

(2)UserController新增方法

/*** 生成登录手机验证码* @param mobile*/
@GetMapping("/code/{mobile}")
public void generateCode(@PathVariable String mobile){userService.sendCode(mobile);
}

相关文章:

集成SpringCloudAlibaba短信服务 短信验证码

1.1 SpringCloudAlibaba短信服务简介 短信服务&#xff08;Short Message Service&#xff09;是阿里云为用户提供的一种通信服务的能力。 产品优势&#xff1a;覆盖全面、高并发处理、消息堆积处理、开发管理简单、智能监控调度 产品功能&#xff1a;短信通知、短信验证码、…...

存储卷(数据卷)—主要是nfs方式挂载

1、定义 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的&#xff0c;一旦容器被删除&#xff0c;数据会丢失。k8s基于控制器创建的pod&#xff0c;delete相当于重启&#xff0c;容器的状态会恢复到原始状态。一旦回到原始状态&#xff0c;后天编辑的文件…...

城市酷选模式开发(门店免单排队返利系统)

城市酷选模式开发&#xff08;门店免单排队返利系统&#xff09;【阿巴】城市酷选商城开发免单排队返利小程序搭建、城市酷选模式开发、城市酷选系统商城开发、城市酷选APP系统开发、城市酷选 每经AI快讯&#xff0c;有投资者在投资者互动平台提问&#xff1a;“以塑代钢”已成…...

JNPF低代码引擎到底是什么?

最近听说一款可以免费部署本地进行试用的低代码引擎&#xff0c;源码上支持100%源码&#xff0c;提供的功能和技术支持比较完善。借助这篇篇幅我们了解下JNPF到底是什么&#xff1f; JNPF开发平台是一款PaaS服务为核心的零代码开发平台&#xff0c;平台提供了多租户账号管理、主…...

#基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件

我们在使用jupyter 写代码后&#xff0c;经常遇到一些写完想把文件转成markdown格式的场景&#xff0c;这里就教你怎么处理相关的问题 使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件 pip install nbconvert pip install pandoc jupyter nbconvert --to markdown 文…...

工信部颁发的人工智能证书《自然语言与语音处理设计开发工程师》证书到手啦!

工信部颁发的人工智能证书《自然语言与语音处理设计开发工程师》证书拿到手啦&#xff01; 近期正在报考的工信部颁发的人工智能证书还有&#xff1a; 《计算机视觉处理设计开发工程师》中级 2024年1月24日至28日-北京 《自然语言与语音处理设计开发工程师》中级 第二期 20…...

canvasdrawer 微信原生小程序生成海报图片

在小程序中生成海报是一种非常有效的推广方式 用户可以使用小程序的过程中生成小程序海报并分享给他人 通过海报的形式&#xff0c;用户可以直观地了解产品或服务的特点和优势 常见绘制海报方式 目前&#xff0c;小程序海报有两种常见的实现方式&#xff1a; canvas 绘制…...

linux基础学习(3):挂载

挂载可以理解为给磁盘空间一个可访问的入口&#xff0c;那个入口称为挂载点&#xff0c;相当于windows中的盘符。 1.挂载命令mount 1.1直接输入mount 查看系统已挂载的设备 1.2挂载与卸载命令 mount -t 文件系统名 设备文件名 挂载点 | umount 挂载点 或 umount 设…...

[每周一更]-(第82期):认识自然处理语言(NLP)

GPT的大火&#xff0c;带起了行业内大模型的爆发&#xff1b;国内外都开始拥有或者研发自己的大模型&#xff0c;下边我们从NLP来进一步深入了解大模型、AI。 一、什么是NLP&#xff1f; 自然语言处理&#xff08;英语&#xff1a;Natural Language Processing&#xff0c;缩…...

Win11如何设置时间显示秒

1、打开注册表 计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced 2、进入以上路径 Advanced新建dword32位&#xff0c;新建一个文件&#xff0c;设置一个名称 3、修改之前创建的文件 4、重启电脑...

世界人口数据分析与探索

文章目录 世界人口数据集介绍数据集 1&#xff1a;世界国家统计数据&#xff1a;数据集 2&#xff1a;世界人口详细信息&#xff08;2023 年&#xff09;&#xff1a;数据集 3&#xff1a;按年份划分的世界人口&#xff08;1950-2023&#xff09;&#xff1a; 数据分析导入必要…...

自动驾驶的未来:BEV与Occupancy网络全景解析与实战揭秘!

自动驾驶领域中&#xff0c;什么是BEV&#xff1f;什么是Occupancy&#xff1f; 作者&#xff1a;小柠檬 | 来源&#xff1a;公众号「3DCV」 BEV是Bird’s Eye View 的缩写&#xff0c;意为鸟瞰视图。在自动驾驶领域&#xff0c;BEV 是指从车辆上方俯瞰的场景视图。BEV 图像可以…...

大众点评评论采集软件使用教程

导出字段&#xff1a; 店铺ID 评论ID 发布时间 人均消费 评分 详情链接 点赞数 浏览数 评论数 最后更新时间 发布平台 推荐 评论详情 原始评论 图片数 图片链接 用户等级 用户名称 用户头像 VIP 私...

2024年前端面试中JavaScript的30个高频面试题之中级知识

基础知识 高级知识 13. 什么是闭包?闭包的用例有哪些? 闭包是一个功能,它允许函数捕获定义该函数的环境(或保留对作用域中变量的访问)即使在该作用域已经关闭后。 我们可以说闭包是函数和词法环境的组合,其中定义了该函数。 换句话说,闭包为函数提供了访问自己的作用域、…...

postman 简单测试(一)

1.postman官网 Postman API Platform 2.研究了一下postman 一些简单的功能&#xff0c;自己做个记录&#xff0c;同时希望能节约点测试时间。 2.1新建一个 collections 长期测的话&#xff0c;最好注册一个账号&#xff0c;开放更多功能。 2.2新建一个请求 后端要先搭建起来…...

12.1、2、3-同步状态机的结构以及Mealy和Moore状态机的区别

同步状态机的结构以及Mealy和Moore状态机的区别 1&#xff0c;介绍Mealy型状态机和Moore型状态机的两种结构2&#xff0c;设计高速电路的方法 由于寄存器传输级&#xff08;RTL&#xff09;描述的是以时序逻辑抽象所得到的有限状态机为依据&#xff0c;因此&#xff0c;把一个时…...

前端框架前置课Node.js学习(1) fs,path,模块化,CommonJS标准,ECMAScript标准,包

目录 什么是Node.js 定义 作用: 什么是前端工程化 Node.js为何能执行Js fs模块-读写文件 模块 语法: 1.加载fs模块对象 2.写入文件内容 3.读取文件内容 Path模块-路径处理 为什么要使用path模块 语法 URL中的端口号 http模块-创建Web服务 需求 步骤: 案例:浏…...

SpringBoot源码启动流程(待完善)

SpringBoot源码启动流程 1. 构造SpringApplication对象 1.1 推测web应用类型 判断关键类是否存在来区分类型 REACTIVENONESERVLET static WebApplicationType deduceFromClasspath() {if (ClassUtils.isPresent(WEBFLUX_INDICATOR_CLASS, null) && !ClassUtils.isP…...

存内计算技术打破常规算力局限性

目录 前言 关于存内计算 1、常规算力局限性 2、存内计算诞生记 3、存内计算核心 存内计算芯片研发历程及商业化 1、存内计算芯片研发历程 2、存内计算先驱出道 3、存内计算商业化落地 基于知存科技存内计算开发板ZT1的降噪验证 &#xff08;一&#xff09;任务目标以…...

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -投票帖子明细实现

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...