【SpringBoot】使用阿里云实现短信验证

news2024/11/20 4:51:43

前言

 之前在写Redis相关内容的时候,提到了Redis可以和我们的短信验证结合起来使用,于是这几天博主空了,想起来这个事,连忙学习了阿里云关于短信验证的内容,使用SpringBoot框架进行代码书写,并将Redis结合起来一起使用。详细内容如下,各位小伙伴“放心食用”〜

一、准备工作

1、阿里云的AcceccKey ID和AccessSecret

     登录阿里云,并实名认证,这里我只是大概讲解需要做那些步骤,最重要的是获得AcceccKey ID和AccessSecret,然后关于开通sms短信服务的操作(比较繁琐),小伙伴们可以在哔哩哔哩上找向相关的视频看操作,这样一来更容易理解一些。

①创建一个用户组并添加sms权限

58e267cb307e43daaf893b81334e4678.png

②创建一个用户

fde347c9e9804e8fb3380fc369b8fd60.png

③获得我们的AcceccKey ID和AccessSecret

47401bfc952e4050b5e3a4a30a91bf4e.png

2、开通阿里云的短信服务

①在搜索框搜索“短信服务”

cb4f9a3af7004c17bc4f2b22cf05d094.png

②根据“快速学习和测试”完成任务

ac0382ac3fd34790a76394f71a1c22f6.png

③根据提示完成“签名管理”和“模板管理”

6ffe91ab83964934ba1bce1252043dce.png

ps:审核的时候,可能审核的时间有点长,请耐心等待!

3、代码开发准备

导入短信发送的Java的SDK依赖

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dysmsapi20170525</artifactId>
            <version>2.0.24</version>
        </dependency>

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>2.2.1</version>
        </dependency>

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


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

4、创建一个Idea项目

项目的目录如下:

53ce32d70c7744b69edbdb56724091f7.png

二、代码实现

1、Service层代码书写

①接口代码

public interface SendMessage {
    public boolean send(String phone, String templateCode, Map<String,Object> code);
}

②实现类!!!

这段代码是核心,是阿里云官方写的一个API接口,里面的数据如签名、AcceccKey ID和AccessSecret等根据自己的情况填写即可,相应的代码也有注解!

ps:代码中phone手机号,要提前在阿里云官方,设置好测试用的手机号,不然到时候可能收不到短信信息。

@Service
public class SendMessageImp implements SendMessage {
    @Override
    public boolean send(String phone, String templateCode, Map<String, Object> code) {
        //初始化配置对象 com.aliyuncs.profile.DefaultProfile 。 Profile 对象存放 your-access-key-id、your-access-key-secret 和 your-region-id
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI5tCdq6x**********", "RYgTJUPy******************");
        //实例化一个客户端,从 com.aliyuncs.IAcsClient 类生成对象 client
        IAcsClient client = new DefaultAcsClient(profile);

        // 创建API请求并设置参数
        //创建对应 API 的 Request 。 类的命名规则为 API 方法名加上 Request
        SendSmsRequest request = new SendSmsRequest();
        //设置请求类 request 的参数。 通过 request 类的 setXxx 方法设置必要的信息,即 API 中必须要提供的信息,通过 set 方法设置参数
        //手机号、验证码、签名、模板
        request.setPhoneNumbers(phone); // 该参数值为假设值,请您根据实际情况进行填写
        request.setSignName("***"); // 该参数值为假设值,请您根据实际情况进行填写
        request.setSysMethod(MethodType.POST);
        request.setTemplateCode(templateCode);
        //构建验证码
        request.setTemplateParam(JSONObject.toJSONString(code));
        try {
            //通过 client 对象获得对应 request 响应 response
            SendSmsResponse response = client.getAcsResponse(request);
            System.out.println(JSON.toJSONString(response));
            // 打印您需要的返回值,此处打印的是此次请求的 RequestId
            System.out.println(response.getRequestId());
            return response.getMessage().equals("OK");
        } 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());
        }
        return false;
    }
}

2、controller层代码书写

在该代码中是引入了SpringBoot自带的Redis模板,用于存储code(随机生成)的值,并设置一定的有效时间,防止code在短时间内失效。

①Redis简单配置

5e08613cdb91428f8d667983d59b18e4.png

具体代码如下:

@RestController
@CrossOrigin//支持跨域问题
public class SmsController {

    @Resource
    private SendMessage sendMessage;

    @Resource
    private RedisTemplate<String,String> redisTemplate;

    @GetMapping("/send/{phone}")
    public String Send(@PathVariable("phone") String phone){
        //调用方法(真实业务)
        String code = redisTemplate.opsForValue().get(phone);//获取取得的手机号
        //如果code不为空则说明将code放入了缓存,而且没有过期
        if(!StringUtils.isEmpty(code)){
            return phone + ":" +code + "未过期";
        }
        //生成4个字的验证码存储在redis中
        code = RandomStringUtils.random(5, new char[]{'0','1','2','3','4','5','6', '7', '8', '9'});

        //String code=random.next(10000);
        HashMap<String,Object> map = new HashMap<>();
        map.put("code",code);
        boolean sms = sendMessage.send(phone, "SMS_*****", map);
        if(sms){
            redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MICROSECONDS);
            return phone+":"+code+"发送成功";
        }else
        return phone+":"+code+"发送失败";
    }
}

三、效果图

访问接口:

c0cada5ee9dd45bf9e593a58553dc41f.png

手机短信截图:

c844fff1b41a41fe954f685c917b8559.png

四、总结

  到这儿,关于这个阿里云短信验证的代码就集成好了,需要的小伙伴就可以直接拿去使用。还是那句话,如果这篇博客对你有所帮助,别忘了关注、点赞支持博主一波哦〜你们的支持就是博主更下去的动力,咱们下一篇博客再见!

 

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

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

相关文章

SGP.02-v4.2-002

ETSI TS 102 226 [5] ts_102.226v13.0.0 Remote APDU structure for UICC based applications 在ETSI TS 102 223 [3]标准中&#xff0c;关于通过PUSH命令打开BIP&#xff08;基于IP的&#xff09;通道的数据字段可以包含任何为OPEN CHANNEL定义的COMPREHENSION-TLV&#xf…

MP4提取gif怎么操作?分享一招快制作

随着各种社交媒体的发展&#xff0c;越来越多的人在聊天中使用gif表情包来调节自己的聊天氛围。搞笑的gif表情包能够为我们平淡的生活添砖加瓦&#xff0c;带给我们一些轻松和欢乐。如果想要自己制作gif动画的时候就可以用视频转gif的工具&#xff0c;能够在不下载软件的情况下…

【Ubuntu永久授权串口设备读取权限‘/dev/ttyUSB0‘】

Ubuntu永久授权串口设备读取权限 1 问题描述2 解决方案2.1 查看ttyUSB0权限&#xff0c;拥有者是root&#xff0c;所属用户组为dialout2.2 查看dialout用户组成员&#xff0c;如图所示&#xff0c;普通用户y不在dialout组中2.3 将普通用户y加入dialout组中2.4 再次查看dialout用…

端到端将重塑智驾?获10亿美金融资,解密英国AI独角兽Wayve

‍作者 |张马也 编辑 |德新 就在前两天&#xff0c;英国AI公司Wayve宣布获得新一轮10.5亿美元融资&#xff0c;投资方为软银、英伟达和现有投资人微软&#xff0c;可以说是顶级豪华阵容。 作为一家英国公司&#xff0c;Wayve这轮融资也创造了英国AI公司有史以来最大的单笔融资…

保姆级教学 基于Hexo搭建个人网站(Github)

文章目录 搭建Hexo静态博客介绍一、注册Github账号二、 安装前置软件包三、 绑定github仓库创建SSH私钥添加私钥连接Github仓库 四、安装hexo1. 更改npm镜像源2. 创建一个文件夹 在里面打开终端3. 初始化hexo 五、切换主题1. 安装主题2. 修改默认主题查看修改主题后的网站 六、…

【密评】 | 商用密码应用安全性评估从业人员考核题库(8/58)

国家支持社会团体、企业利用自主创新技术制定&#xff08;&#xff09;国家标准、行业标准相关技术要求的商用密码团体标准、企业标准。 A.低于 B.等于 C.高于 D.相当于 在密码的实际应用中&#xff0c;通常使用下列哪种方法来实现不可否认性&#xff08;&#xff09;。 A.加密…

无人机+集群控制:穿越机集群技术详解

来源&#xff1a;无人机技术圈 作者&#xff1a;无人机 “人工智能技术与咨询” 发布 无人机集群是指为共同执行某一任务、受统一指挥的多架无人机组成的集合体。无人机集群可以通过网络技术实现互联互通&#xff0c;形成集中统一的整体&#xff0c;从而实现协同作战或完成…

测斜仪的具体应用:从地下工程到斜坡监测

测斜仪作为一种精密的测量工具&#xff0c;在多个领域都有广泛的应用。从最初的地下工程&#xff0c;到现今的斜坡监测&#xff0c;测斜仪的技术进步和应用范围的扩大&#xff0c;为工程安全提供了有力的保障。 一、地下工程中的测斜仪应用 在地下工程中&#xff0c;测斜仪主要…

python输入多行统计行数

input输入多行 统计行数编写一段代码来统计输入文本的行数。以下是一个简单的Python示例代码&#xff1a; # 从用户输入中读取多行文本 lines [] print("请输入文本&#xff0c;输入# ꧂ ꧁结束输入:") while True:line input()if line end:breaklines.append(li…

【R语言与统计】SEM结构方程、生物群落、多元统计分析、回归及混合效应模型、贝叶斯、极值统计学、meta分析、copula、分位数回归、文献计量学

统计模型的七大类&#xff1a;一&#xff1a;多元回归 在研究变量之间的相互影响关系模型时候&#xff0c;用到这类方法&#xff0c;具体地说&#xff1a;其可以定量地描述某一现象和某些因素之间的函数关系&#xff0c;将各变量的已知值带入回归方程可以求出因变量的估计值&…

【御控物联】Java JSON结构转换、JSON协议转换、JSON属性互换(15):对象To数组——转换映射方式

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON对象 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

璞华科技中标苏州工业园区“科技发展公司运营管理系统”升级改造项目

近日&#xff0c;璞华科技中标苏州工业园区科技发展有限公司“科技发展公司运营管理系统”升级改造项目。 苏州工业园区科技发展有限公司成立于2000年&#xff0c;是苏州工业园区管委会直属国有企业&#xff0c;聚焦以人工智能为引领的数字经济产业创新集群&#xff0c;重点布局…

亚马逊广告怎么优化?11条口诀请谨记

对于亚马逊卖家来说&#xff0c;想要销量好&#xff0c;亚马逊广告是不可或缺的&#xff01;那么卖家要如何优化亚马逊广告才可以获得更好的效果呢&#xff1f;今天给大家分享11条亚马逊广告优化口诀&#xff0c;赶紧收藏学起来吧&#xff01; 亚马逊广告优化口诀分享 1、曝光高…

Python-VBA函数之旅-sorted函数

目录 一、sorted函数的常见应用场景 二、sorted函数使用注意事项 三、如何用好sorted函数&#xff1f; 1、sorted函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a; https://blog.csdn.net/ygb_1024?spm1…

实现WPF中的数据更新 属性通知界面:INotifyPropertyChanged接口

在WPF (Windows Presentation Foundation) 应用程序中&#xff0c;当数据发生变化时&#xff0c;通常希望UI能够自动更新以反映这些变化。为了实现这一功能&#xff0c;WPF 提供了数据绑定机制&#xff0c;并且配合 INotifyPropertyChanged 接口使用&#xff0c;可以在数据模型…

VMware 不能拍摄快照

问题&#xff1a; 拍摄快照后&#xff0c;会出现这个弹窗&#xff0c;然后虚拟机就直接自动退出了&#xff0c;还会弹出一个框&#xff1a; 解决方法&#xff1a; 我用的是 window11 和 VMware16.0.0 这是因为VM16与window11&#xff0c;二者之间版本不兼容问题&#xff0c;可…

Hierarchical File Systems are Dead——论文泛读

HotOS 2009 Paper 分布式元数据论文阅读笔记整理 问题 文件系统一直采用分层名称空间&#xff0c;随着用户与越来越多的数据交互&#xff0c;并且对搜索能力的要求越来越高&#xff0c;这样一个简单的分层模型已经过时了。例如&#xff0c;查找照片时&#xff0c;用户描述他们…

设计模式 六大原则之单一职责原则

文章目录 概述代码例子小结 概述 先看下定义吧&#xff0c;如下&#xff1a; 单一职责原则的定义描述非常简单&#xff0c;也不难理解。一个类只负责完成一个职责或者功能。也就是说在类的设计中&#xff0c; 我们不要设计大而全的类,而是要设计粒度小、功能单一的类。 代码例…

OBS插件--音频采集

音频采集 音频采集是一款 源 插件,类似于OBS的win-capture/game-capture&#xff0c;允许从特定应用程序捕获音频&#xff0c;而不是捕获整个系统的音频。避免了因为特定音频的采集而需要引入第三方软件&#xff0c;而且时延也非常低。 下面截图演示下操作步骤&#xff1a; …

随身wifi网速测评!讯唐随身wifi和格行随身wifi哪个网速快?随身wifi哪个品牌最好用?

最近收到很多网友私信&#xff0c;希望推荐一款好用性价比高的随身wifi。通过各平台排行榜选出了公认口碑最好的格行随身wifi&#xff1b;又挑选了网友们经常问的的讯唐随身wifi&#xff1b;两个一起来实测一下&#xff0c;哪款更好用&#xff01; 【品牌评测】 格行随身wifi&…