spring boot实现短信验证码功能

1、到阿里云网站申请

https://market.aliyun.com/products/5700000
2/cmapi00046920.html

2、配置文件,可申请测试

sms:app-code: xxxxxxxxxtemplate-id: xxxxxxx

3、使用restTemplate用于第三方接口调用

package com.example.rsocketclient.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate(ClientHttpRequestFactory requestFactory){return new RestTemplate(requestFactory);}@Beanpublic ClientHttpRequestFactory simpleClientHttpRequestFactory(){SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();factory.setReadTimeout(10000);factory.setConnectTimeout(10000);return factory;}
}

4、装smsConfig,使用了Lombok

package com.example.rsocketclient.entity;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;@ConfigurationProperties(prefix = "sms")
@Configuration
@Data
public class SmsConfig {private String appCode;private String templateId;
}

5、封装发送业务,信息打印使用了slf4j

package com.example.rsocketclient.config;import com.example.rsocketclient.entity.SmsConfig;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;@Component
@Slf4j
public class SmsComponent {private static final String URL_TEMPLATE = "https://jmsms.market.alicloudapi.com/sms/send?mobile=%s&templateId=%s&value=%s";@Resourceprivate RestTemplate restTemplate;@Resourceprivate SmsConfig smsConfig;public void send(String to, String templateId, String value) {String url = String.format(URL_TEMPLATE, to, templateId, value);HttpHeaders headers = new HttpHeaders();//最后在header中的格式(中间是英⽂空格)为headers.set("Authorization", "APPCODE " + smsConfig.getAppCode());HttpEntity<String> entity = new HttpEntity<>(headers);ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);log.info("url={},body={}", url, response.getBody());if (response.getStatusCode() == HttpStatus.OK) {log.info("发送短信成功,响应信息:{}", response.getBody());} else {log.error("发送短信失败,响应信息:{}", response.getBody());}}
}

6、测试控制器代码

package com.example.rsocketclient.controller;import com.example.rsocketclient.config.SmsComponent;
import com.example.rsocketclient.entity.SmsConfig;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ShortMessageController {@Resourceprivate SmsConfig smsConfig;@Resourceprivate SmsComponent smsComponent;@GetMapping("/send/{iphone}/code/{code}")public String testSmsSend(@PathVariable("iphone") String iphone,@PathVariable("code") String code){smsComponent.send(iphone,smsConfig.getTemplateId(),code);return "OK";}
}

7、接口地址在这

在这里插入图片描述

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

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

相关文章

Altium Designer输出Gerber文件步骤

参考链接 技术指导&#xff1a;Altium Designer输出Gerber文件步骤 (jlc.com)https://www.jlc.com/portal/server_guide_10171.html 特此记录 anlog 2024年7月12日

springboot 程序运行一段时间后收不到redis订阅的消息

springboot 程序运行一段时间后收不到redis订阅的消息 问题描述 程序启动后redis.user.two主题正常是可以收到消息的&#xff0c;发一条收一条&#xff0c;但是隔一段时间后&#xff1b;就收不到消息了&#xff1b; 此时如果你手动调用发送另外一个消息订阅redis.user.two2&…

豆包AI智能助手:知识库整理与智能检索的双重应用

引言 抖音豆包&#xff0c;作为字节跳动开发的AI智能助手&#xff0c;不仅仅是一个简单的虚拟角色&#xff0c;而是集成了深度学习和自然语言处理技术的复杂系统&#xff0c;专门设计来增强用户在抖音平台上的体验。同时&#xff0c;豆包的应用示范了AI智能助手在知识库管理和…

华为HCIP Datacom H12-821 卷38

1.多选题 下面关于 BGP中的公认属性的描述&#xff0c;正确的是 A、公认必遵属性是所有BGP路由器都识别&#xff0c;且必须存在于Updata消息中心 B、BGP必须识别所有公认属性 C、公认属性分为公认必遵和可选过渡两种 D、公认任意属性是所有BGP造由器都可以识别&#xff0c…

怎么拿下Android开发Android面试题?(一)

Hello&#xff0c;之前更新了面试中的Android的Java面试部分&#xff0c;这里会更新关于Android部分的面试题。 怎么拿下Android开发Android面试题&#xff1f;&#xff08;二&#xff09; 第一节 Android 四大组件相关1.1 Activity 与 Fragment 之间常见的几种通信方式&#x…

编程参考 - 在C++移动构造函数声明中使用noexcept

在 C 中&#xff0c;noexcept 是用于表示函数不抛出异常的指定符。它既可用于常规函数&#xff0c;也可用于特殊成员函数&#xff0c;包括构造函数和析构函数。使用 noexcept 可以帮助编译器进行优化&#xff0c;提高代码的安全性和正确性。 In C, noexcept is a specifier use…

设计模式的七项原则

文章目录 设计模式的七项原则单一职责原则接口隔离原则依赖倒置里氏替换原则开闭原则迪米特法则复用合成原则 设计模式的七项原则 分别为 单一职责原则接口隔离原则依赖倒置里氏替换原则开闭原则迪米特法则复用合成原则 单一职责原则 一个类负责一个职责&#xff0c;不可以…

解决configure: error: Unexpected output of ‘arch‘ on OSX

最近很好高兴用上了新版的macbook&#xff08;芯片&#xff1a;Apple M3 Pro&#xff0c;操作系统&#xff1a;14.3&#xff09;。 不高兴的是遇到了不兼容的问题。所以选型还是成熟的技术是关键。 电脑里用pyenv 工具管理多个版本的python。 命令&#xff1a;pyenv install x…

FX110网:香港证监会对Yomaex等多家虚拟资产交易平台发出警告

近日&#xff0c;香港证券及期货事务监察委员会&#xff08;香港证监会&#xff0c;SFC&#xff09;对虚拟资产交易平台Yomaex发出警告&#xff0c;运营网址为yomaexd.com.该平台曾多次被FX110网发文曝光。相关阅读 《Yomaex平台“高额回报”是“高级陷阱”&#xff0c;公务员也…

Mybatis-plus乐观锁的实现

第一步&#xff1a;在springboot启动类 的拦截器中添加乐观锁Bean public MybatisPlusInterceptor plusInterceptor(){MybatisPlusInterceptor mybatisPlusInterceptor new MybatisPlusInterceptor();//分页插件mybatisPlusInterceptor.addInnerInterceptor(new PaginationInn…

Java中Timer定时器的使用

定时器Timer 概述&#xff1a;开发中&#xff0c;有时候我们会需要一些周期性的操作&#xff0c;每隔一段时间去做一件事&#xff0c;在Java中可以通过Timer定时器去实现。Timer是一种工具&#xff0c;线程用其安排以后在后台线程中执行的任务。可安排任务执行一次&#xff0c…

Java Redis多限流

在Java中实现Redis多限流通常涉及使用Redis的某些特性&#xff0c;如INCR、EXPIRE、Lua脚本或者更高级的Redis数据结构如Redis Bitmaps、Redis Streams结合Redis Pub/Sub&#xff0c;或者使用Redis的第三方库如Redis Rate Limiter&#xff08;基于Lua脚本或Redis自身功能实现&a…

解决WSL2突然没网络问题

解决WSL2突然没网络问题 在使用Windows Subsystem for Linux&#xff08;WSL&#xff09;时&#xff0c;有时可能会遇到网络连接问题。以下步骤可以帮助你解决这些问题。 一、启动命令提示符&#xff08;cmd&#xff09; 1. 关闭WSL 在开始任何网络配置前&#xff0c;先关闭…

Oracle11g_RAC for vmware workstation 安装教程(on suse11)

一、前言 本文介绍在vmware workstation环境下&#xff0c;基于suse11sp1操作系统安装Oracle11g RACASM 数据库&#xff08;两节点&#xff09;。 1.1 RAC中的基本概念 安装ORACLE RACASM前&#xff0c;您可能需要事先简要的了解RAC&#xff0c;CRS&#xff0c;ASM的概念。 1.1…

easyExcel 不规则模板导入数据

文章目录 前言一、需求和效果二、难点和思路三、全部代码踩坑 前言 之前分享的 EasyExcel 批量导入并校验数据&#xff0c;仅支持规则excel&#xff0c;即首行表头&#xff0c;下面对应数据&#xff0c;无合并单元格情况。 本篇主要解决问题&#xff1a; 模板excel 表头不在首…

【python】 对上市银行的年报信息进行语义挖掘,计算各银行年报中与金融科技有关的关键词的词向量的余弦相似性,衡量银行的金融科技发展程度。

目录 引言 文本预处理 数据收集 ​编辑​编辑 文本清洗 词向量的训练 Word2Vec 的两种主要模型 Word2Vec 的工作原理 训练过程 Word2Vec 的应用 训练模型 建立银行应用金融科技的关键词词库 关键词 计算余弦相似度 统计关键词词频 引言 随着金融科技的迅猛发展&a…

在Linux系统,高效管理Python数据采集程序!

在当今数字化时代&#xff0c;数据的获取和处理变得至关重要。Python 凭借其强大的功能和丰富的库&#xff0c;成为了数据采集的热门选择。而 Linux 系统以其稳定性和高效性&#xff0c;为 Python 数据采集程序的运行提供了理想的环境。 一、Anaconda 的安装 Anaconda 是一个包…

react多级组件间如何传递props

1.使用props属性一级级传递 针对父&#xff0c;子&#xff0c;孙子&#xff0c;如何实现将props从父级传递给孙子。 父&#xff1a; <ParentComponent parent{this} /> //传递this子&#xff1a; <childComponent propsContext{this.props.parent} />孙子&#x…

前端面试题54(断点续传讲解)

断点续传是一种在上传或下载大文件时&#xff0c;如果因为网络问题中断&#xff0c;可以从已经上传或下载的部分继续&#xff0c;而不是重新开始的技术。这对于提高用户体验和节省带宽非常有帮助。下面我将分别从HTTP协议层面、前端实现思路以及一个简单的前端实现示例来讲解断…

【代码随想录算法训练营第六十五天|卡码网94.城市间货物运输IIIIII】

文章目录 94.城市间货物运输ISPFA(bellman_ford队列优化)Bellman_ford判断负权回路 96.城市间货物运输IIIBellman_ford 94.城市间货物运输I SPFA(bellman_ford队列优化) 在bellman_ford的基础上&#xff0c;在每次松弛的时候&#xff0c;只有和前面的结点相连的边的松弛才是有…