SpringBoot-短信验证码-快速入门Demo(含redis)(手把手教你开通阿里云短信服务到写出个最终代码来)

B站小狂神-此博客的内容就是看了这个视频的总结(博主自己写的哦~并非转载)
视频链接-【狂神说】通俗易懂的阿里云短信业务实战教程(露脸)


您是否还在为别人的项目有短信功能自己的却没有?
您是否还在为自己的项目没有短信功能逼格不够高而发愁?
您是否想要简单了解下短信功能但网上的只有代码没有其他相关知识的介绍而发愁?

dont 担心了!这篇博客是为了那些想简单入手下短信服务的老哥而准备的~~(大佬勿喷)
主要介绍下阿里云的一些用户操作(直接用最高权限的accessKeyId和key密码也不现实是不是,需要分不同的用户使用),简单介绍下阿里云短信开通,包括添加短信模板和签名(决定短信发送什么是不是

您也可以点击目录,跳转到您想看的部分去

文章目录

  • 1.了解阿里云用户权限操作(多图警告)
  • 2.开通阿里云短信服务
    • 添加短信模板
    • 添加签名
  • 3.编写测试代码(★★★)
    • 项目结构
    • 相关的配置文件
    • controller,service层代码
    • 结果展示
  • 4.编写可复用的微服务接口(暂时空着,微服务还没学233)

1.了解阿里云用户权限操作(多图警告)

在这里插入图片描述
阿里云账号大家申请之后,就可以使用阿里云的服务了,我们一般都是通过授权码+id+密码的方式来使用阿里云服务的,这次我们就用短信服务来做个小Demo,先登录阿里云官网,按着下面的图步骤来走。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建一个用户组,给他添加下短信权限,Sms
在这里插入图片描述
然后用户也是差不多,
在这里插入图片描述
创建一个用户给它添加到刚才那个组里面,这样整个用户就只能使用短信服务了,值得注意的是那个创建用户的时候会告诉accessKeyId和accessKeySecret,记得把这两个保存下来,特别是accessKeySecret只在你创建用户的时候显示,忘了的话只能删除accessKeyId再新建一个了,这两个是等会需要填到代码里面的。老哥们注意下了,上面这些操作都是为了保护你的账号,这个用户组只能使用短信服务的,其他服务是是使用不了的。
(这个授权码和密码有点类似快递小哥进你的小区,你给他发个授权码和密码,有一定的时效或者权限,总比直接告诉他你的账号和密码要安全多了)

2.开通阿里云短信服务

在这里插入图片描述
我们先在搜索框中输入短信服务,背景就是我们点击回车之后的啦样子啦,注意那个国内服务,我们等下要设置的什么短信内容都是在这里设置的,看那个签名管理,模板管理。说一说为什么要设置这两个内容,这两个决定你的短信发送是什么内容!
在这里插入图片描述

添加短信模板

在这里插入图片描述
注意那个模板CODE,必须审核通过才能用在代码中!
在这里插入图片描述
再继续完成一些相关的内容补充,点击提交就好了。

添加签名

在这里插入图片描述
之后就是签名管理,也是一个类似的操作。这个签名就是说明你是哪个公司或者是什么项目的。我写学习之星是因为某个群里我的外号叫学习之星2333。注意,这个签名也是必须通过了才能在代码中写“学习之星”的!

这两个需要人工审核,不过感觉快很多的,大概20分钟左右吧。

3.编写测试代码(★★★)

项目结构

先大概看看项目结构吧,不复杂的,代码中我也会写一些注释方便大家理解。
在这里插入图片描述

相关的配置文件

pom.xml

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><!-- 阿里云短信依赖 --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.1.0</version></dependency><!--fastjson,用来解析json--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.60</version></dependency><!-- 加入redis相关的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency></dependencies>

application.properties

// 服务端口
server.port=8080// redis 相关的配置
spring.redis.host=127.0.0.1
spring.redis.port=6379

controller,service层代码

service层
SendSms 接口

package com.example.sms.service;import org.springframework.stereotype.Service;import java.util.Map;public interface SendSms {/*** 发送短信验证码* @param phoneNum  手机号* @param templateCode  模板号* @param code   验证码* @return*/public boolean send (String phoneNum, String templateCode, Map<String, Object> code);
}

SendSmsImpl 实现类
注意替换accessKeyId,accessKeySecret,还有request.putQueryParameter方法中的一些内容!!

/*** 发送短信验证码* @param phoneNum  手机号* @param templateCode  模板号* @param code   验证码* @return*/
@Service
public class SendSmsImpl implements SendSms {@Overridepublic boolean send(String phoneNum, String templateCode, Map<String, Object> code) {// 连接阿里云DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "请替换为你的accessKeyId", "请替换为你的accessKeySecret");IAcsClient client = new DefaultAcsClient(profile);// 构建请求CommonRequest request = new CommonRequest();request.setMethod(MethodType.POST);// 这些内容不要动,是人家阿里爸爸弄出来的,咱不用管request.setDomain("dysmsapi.aliyuncs.com");request.setVersion("2017-05-25");// 自己的内容,此处 SendSms 为发送验证码request.setAction("SendSms");//自定义的参数(手机号,验证码,签名,模板! )//这是我的内容,请结合你的情况修改为你的东西!!!request.putQueryParameter( "PhoneNumbers",phoneNum);request.putQueryParameter( "SignName","学习之星");request.putQueryParameter( "TemplateCode","SMS_189620774");request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code));try {CommonResponse response = client.getCommonResponse(request);// 在控制台上打印出返回信息System.out.println(response.getData());// 返回请求信息是否成功return response.getHttpResponse().isSuccess();} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}return false;}
}

controller层

PS:像这种注解@GetMapping("/send/{phone}") ,浏览器URL对应的就是http://localhost:8080/send/123456
不要写成了什么 http://localhost:8080/send/phone=15894621650 这样是接受不到的!!
该接口应该使用get方法访问,不是post方法!!(接口测试工具中要注意下)

@RestController
@CrossOrigin    //跨域支持
public class SmsApiController {@Autowiredprivate SendSms sendSms;@Autowiredprivate RedisTemplate<String, String> redisTemplate;@GetMapping("/send/{phone}")public String code(@PathVariable("phone") String phone) {//调用发送方法,模拟真实业务,redisString code = redisTemplate.opsForValue().get(phone);if (!StringUtils.isEmpty(code)) {return phone + ":" + code + "已存在,还没有过期";}// 生成验证码并且存储到 redis 中code = UUID.randomUUID().toString().substring(0, 4);HashMap<String, Object> param = new HashMap<>();param.put("code", code);boolean isSend = sendSms.send(phone, "SMS_189620774", param);if (isSend) {redisTemplate.opsForValue().set(phone, code, 600, TimeUnit.SECONDS);return phone + ":" + code + "发送成功!";} else {return "发送失败!";}}
}

结果展示

接口测试工具效果:
在这里插入图片描述
手机接收到的效果:
在这里插入图片描述

4.编写可复用的微服务接口(暂时空着,微服务还没学233)

结合你的具体业务吧233

谢谢您能看到结尾~
原人生的路上,你我共勉~

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

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

相关文章

Bresenham快速画直线算法

现在的计算机的图像的都是用像素表示的&#xff0c;无论是点、直线、圆或其他图形最终都会以点的形式显示。人们看到屏幕的直线只不过是模拟出来的&#xff0c;人眼不能分辨出来而已。那么计算机是如何画直线的呢&#xff0c;其实有比较多的算法&#xff0c;这里讲的是Bresenha…

国产光刻机正式宣布:今年出货150台

来源&#xff1a;世界先进制造技术论坛在芯片领域&#xff0c;有一个叫光刻机的设备&#xff0c;不是印钞机&#xff0c;但却比印钞机还金贵。全球只有荷兰一家叫做阿斯麦&#xff08;ASML&#xff09;的公司集全球高端制造业之大成&#xff0c;一年时间造出二十台高端设备&…

元宇宙的“42条共识”

来源&#xff1a; 量子学派*以下内容、图片综合自《图说元宇宙》《设计元宇宙》系列01元宇宙不是一天建成的罗马不是一天建成的&#xff0c;元宇宙也一样。人类从未像今天这样&#xff0c;可以自己成为“创世主”。元宇宙融合了信息技术&#xff08;5G/6G&#xff09;、互联网时…

手把手教你用java读写excel表格文件(POI,EasyExcel)

视频链接-我是学习之星我为狂神打call~ 【狂神说Java】POI及EasyExcel一小时搞定通俗易懂 想给项目添加一个表格导入导出功能吗&#xff1f; “xxx管理系统”没有导入导出功能逼格不够了&#xff1f; 想简单入手下 how to 用java 生成excel又找不到合适的教程&#xff1f; com…

欢迎参加2022年第一次《城市大脑建设标准规范》专家研讨会

来源&#xff1a;世界数字大脑标准研究组2018年以来&#xff0c;城市大脑正成为智慧城市和智能产业的新热点&#xff0c;有近500个城市提出城市大脑的建设规划&#xff0c;数千家大中型科技企业进入城市大脑的建设领域。如何理清城市大脑的概念和定义&#xff0c;制定统一的城市…

Spring常用注解的讲解

转载&#xff0c;原文链接 作者&#xff1a;字母哥博客 本文出自&#xff1a;springboot深入浅出系列 文章目录一、常用注解回顾1.1 RequestBody与ResponseBody1.2. RequestMapping注解1.3. RestController与Controller1.4. PathVariable 与RequestParam二、接收复杂嵌套对象参…

复杂系统与人工生命:十年研究概览

来源&#xff1a;集智俱乐部作者&#xff1a;Thomas McAtee、Claudia Szabo译者&#xff1a;陈翔 审校&#xff1a;刘培源编辑&#xff1a;邓一雪导语人工生命&#xff08;artificial life&#xff09;是通过仿真建模、机器技术和生物化学等方式模拟自然生命系统&#xff0c;进…

5.1传输层概述

5.1传输层概述 文章目录传输层概述传输层的两个协议传输层的寻址与端口传输层概述 传输层的两个协议 传输层的寻址与端口

多细胞生命进击之路:单细胞为何放弃自由,长成复杂的多细胞?

来源&#xff1a;集智俱乐部作者&#xff1a;Veronique Greenwood译者&#xff1a;赵雨亭审校&#xff1a;张澳编辑&#xff1a;邓一雪导语人类作为复杂的多细胞生命&#xff0c;似乎理所当然地认为&#xff0c;多细胞生命相对单细胞生命有绝对的优势。但实际上单细胞生命进化为…

5.2 UDP协议

5.2 UDP协议 文章目录用户数据报协议udp概述udp首部形式udp校验用户数据报协议udp概述 udp首部形式 udp校验

焦李成院士:进化优化与深度学习的思考

来源&#xff1a;AI科技评论作者&#xff1a;焦李成整理&#xff1a;维克多编辑&#xff1a;青暮2021年12月17日&#xff0c;西安电子科技大学人工智能学院教授、欧洲科学院外籍院士、IEEE Fellow焦李成受邀参加2021中国计算机大会“下一代演化计算发展趋势”论坛&#xff0c;并…

5.3.1 TCP协议特点和TCP报文段格式

5.3.1 TCP协议特点和TCP报文段格式 文章目录tcp协议的特点tcp 报文段首部格式tcp协议的特点 tcp 报文段首部格式

互补性:从不同的角度思考同一个事物时,发现它同时具有不同甚至相互矛盾的性质...

来源&#xff1a;混沌巡洋舰检验一流智力的标准是头脑中能同时持有两种截然相反的观点&#xff0c;却能并行不悖。——弗朗西斯斯科特菲茨杰拉德显然&#xff0c;这种互补性推翻了学术的本体论。真理是什么&#xff1f;我们之所以要提出彼拉多的问题&#xff0c;并不是出于怀疑…

5.3.2 TCP连接管理

5.3.2 TCP连接管理 文章目录tcp 连接管理tcp的连接简历TCP传输连接中的SYN、ACK、SEQ、 AN分别是什么意思?syn洪泛攻击tcp的连接释放tcp 连接管理 tcp的连接简历 TCP传输连接中的SYN、ACK、SEQ、 AN分别是什么意思? syn洪泛攻击 tcp的连接释放

2021年量子计算的研发现状与未来展望

来源&#xff1a;AI科技评论作者&#xff1a;杏花编辑&#xff1a;青暮从硬件、软件和算法以及各国政策等方面展现量子技术最新进展。超导量子计算过去宣称实现的量子霸权在最新的获得戈登贝尔奖被宣告打破&#xff0c;但谷歌和IBM依然在这一领域有着雄心勃勃的计划。离子阱则凭…

5.3.3 TCP可靠传输

5.3.3 TCP可靠传输 文章目录

【动态规划】洛谷 P1282 多米诺骨牌

【动态规划】洛谷 P1282 多米诺骨牌 时间限制: 1 Sec 内存限制: 128 MB 题目描述 多米诺骨牌有上下2个方块组成&#xff0c;每个方块中有1~6个点。现有排成行的 上方块中点数之和记为S1&#xff0c;下方块中点数之和记为S2&#xff0c;它们的差为|S1-S2|。例如在图8-1中&#…

深度学习在工业推荐如何work?Netflix这篇论文「深度学习推荐系统Netflix案例分析」阐述DL在RS的优劣与经验教训...

来源&#xff1a;专知深度学习在推荐系统中如何发挥作用是一个重要的问题。最近来自Netflix的文章详细阐述了这一点指出&#xff1a;在建模用户物品交互方面&#xff0c;深度学习相比传统基线方法并无太大优势&#xff0c;而对于异质特征的表示融入深度学习则具有很好建模性能。…

5.3.4 TCP流量控制

5.3.4 TCP流量控制 文章目录tcp流量控制tcp流量控制

Nature封面,硅量子计算达到99%的准确率

来源&#xff1a;ScienceAI编辑&#xff1a;萝卜皮在 2022 年 1 月 20 日发布的《Nature》上&#xff0c;有三篇论文独立介绍了基于硅的量子计算平台&#xff0c;它们使用了多量子比特纠缠&#xff1a;一篇来自新南威尔士大学&#xff08;UNSW&#xff09; Andrea Morello 团队…