Springboot项目集成短信验证码(超简单)

操作流程

  1. 注册验证码平台
  2. 创建验证码模版
  3. 开始集成(无需引入第三方库)

注册并登陆中昱维信验证码平台

获取AppID和AppKey。

在这里插入图片描述

创建验证码模版

创建验证码模版,获取验证码模版id
在这里插入图片描述

开始集成

  1. 创建controller
import org.springframework.web.bind.annotation.*;  @RestController  
@RequestMapping("/api/sms")  
public class SmsVerificationController {  private final SmsVerificationService smsVerificationService;  public SmsVerificationController(SmsVerificationService smsVerificationService) {  this.smsVerificationService = smsVerificationService;  }  @GetMapping("/send")  public String sendVerificationCode(@RequestParam String phone) {  smsVerificationService.sendVerificationCode(phone);  return "发送成功 ";  }  @PostMapping("/verify")  public String verifyCode(@RequestParam String phone, @RequestParam String code) {  if (smsVerificationService.verifyCode(phone, code)) {  return "验证成功";  } else {  return "验证码错误";  }  }  
}
  1. 创建service
import java.util.concurrent.ConcurrentHashMap;  
import java.util.UUID;  public class SmsVerificationService {  // 使用ConcurrentHashMap来存储验证码和手机号的映射关系  也可以用session存储private static ConcurrentHashMap<String, String> verificationCodeMap = new ConcurrentHashMap<>();  // 生成随机验证码  private static String generateVerificationCode() {  return UUID.randomUUID().toString().substring(0, 6);  }  // 发送验证码  public void sendVerificationCode(String phoneNumber) {  // 生成验证码  String code = generateVerificationCode();  // 存储验证码  verificationCodeMap.put(phoneNumber, code);  // 调用短信服务API发送验证码  sendSms(phoneNumber, code);  }  // 验证验证码  public boolean verifyCode(String phoneNumber, String inputCode) {  // 从缓存中获取存储的验证码  String storedCode = verificationCodeMap.get(phoneNumber);  // 验证输入的验证码是否正确  if (storedCode != null && storedCode.equals(inputCode)) {  // 验证码正确,从缓存中移除  verificationCodeMap.remove(phoneNumber);  return true;  }  return false;  }  // 发送短信的方法  private void sendSms(String phone, String code) {  // 验证码模版idString templateId = "100001";// appIdString appId = "YOUR_APP_ID";// appKeyString appKey = "YOUR_APP_KEY";// API地址String apiUrl = "https://vip.veesing.com/smsApi/verifyCode";try {URL url = new URL(apiUrl + "?phone=" + phone + "&templateId=" + templateId + "&appId=" + appId + "&appKey=" + appKey + "&variables=" + code);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));StringBuilder response = new StringBuilder();String line;while ((line = rd.readLine()) != null) {response.append(line);}rd.close();// 解析短信服务的响应response,根据返回结果判断是否发送成功// 成功{"returnStatus":"1 ","message":"成功","remainPoint":"241","taskId":"3313746","successCounts":"1"}// 失败{"returnStatus":"0","message":"参数错误","remainPoint":null,"taskId":null,"successCounts":null}// 处理成功或失败的逻辑...} catch (Exception e) {e.printStackTrace();}}  
}

有问题请在评论区留言~

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

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

相关文章

MATLAB环境下基于随机游走拉普拉斯算子的快速谱聚类方法

古人有云&#xff0c;物以类聚&#xff0c;在面临信息爆炸问题的今天&#xff0c;对信息类别划分的价值日益显现&#xff0c;并逐步成为学者们的研究热点。分类和聚类是数据挖掘的重要工具&#xff0c;是实现事物类别划分的左右手&#xff0c;聚类又是分类一种特殊的方式。所谓…

CodeWhisperer安装教导--一步到位!以及本人使用Whisperer的初体验。

CodeWhisperer是亚马逊出品的一款基于机器学习的通用代码生成器&#xff0c;可实时提供代码建议。类似 Cursor 和Github AWS CodeWhisperer 亚马逊科技的CodeWhisperer是Amazon于2021年12月推出的一款代码补全工具&#xff0c;与GitHub Copilot类似。主要的功能有:代码补全注释…

猫毛过敏养猫人士的必备养猫好物-宠物空气净化器品牌分享

许多猫奴在与猫相处一段时间后突然对猫毛过敏&#xff0c;这真是令人难受。一些人认为对猫咪过敏是因为它们在空气中飘浮的毛发引起的&#xff0c;但实际上大部分人之所以过敏是因为对猫身上一种微小的蛋白质过敏。这种导致过敏的蛋白质附着在猫咪的一些皮屑上。我们都知道猫咪…

Linux 下安装Jupyter

pip3 install jupyter pip3 install ipython -------------------------------------------- pip3 install jupyterlab jupyter lab pip3 list | grep jupyterlab 启动&#xff1a; python3 -m jupyter lab 2.安装朱皮特 pip3 install -i https://pypi.douban.com/simpl…

高性能的key-value数据库Redis 介绍

Redis 是一个高性能的key-value数据库。 Redis是一个开源的键值存储系统&#xff0c;通常用于缓存和消息传递。它支持多种类型的数据结构&#xff0c;如字符串、列表、集合、散列表和有序集合等。Redis的特点是提供了高性能、灵活性和可伸缩性。 Redis的主要特点包括&#xff…

Pytorch学习 day02(加载数据)

加载数据 * Dataset提供一种方式&#xff1a;来获取数据及其label&#xff0c;给数据进行编号 * Dataloader为神经网络提供不同的数据形式 Dataset的组织形式有很多种&#xff0c;例如&#xff1a; 将label放在文件夹名上&#xff0c;如下&#xff1a; #Dateset # --train #…

Python算法题集_组合总和

Python算法题集_组合总和 题39&#xff1a;组合总和1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【值传递回溯】2) 改进版一【引用传递堆栈回溯】3) 改进版二【过程值列表缓存遍历后检索】 4. 最优算法5. 相关资源 本文为Python算法题集之一的…

.halo勒索病毒的最新威胁:如何恢复您的数据?

尊敬的读者&#xff1a; 随着科技的发展&#xff0c;网络安全已经成为我们日常生活中不可忽视的重要议题。其中&#xff0c;勒索病毒是当前网络安全威胁中的一大挑战&#xff0c;而“.halo”勒索病毒更是近期备受关注的恶意软件之一。本文将介绍关于“.halo”勒索病毒的背景知…

AI新工具(20240227) StickerBaker文本生成贴纸的工具;Mistral Large;Rewind等

StickerBaker - 基于Replicate和Fly.io技术&#xff0c;100%开源的制作贴纸的工具 StickerBaker是一个基于人工智能的贴纸创作工具&#xff0c;允许用户通过输入特定的提示语句生成独特的贴纸。这个工具使用了Replicate平台来生成贴纸&#xff0c;同时依托于Fly.io作为其基础设…

算法项目外包的收费方式

针对算法研究性项目的收费方式和注意事项&#xff0c;这取决于项目的具体性质、规模和所涉及的技术领域。以下是一些常见的收费方式和需要注意的问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 收…

Python学习DAY09_文件和异常

文件和异常 实际开发中常常会遇到对数据进行持久化操作的场景&#xff0c;而实现数据持久化最直接简单的方式就是将数据保存到文件中。 在 Python 中实现文件的读写操作其实非常简单&#xff0c;通过 Python 内置的 open 函数&#xff0c;我们可以指定文件名、操作模式、编码信…

商业江湖大揭秘:月入千万与颗粒无收,究竟差了什么?

在商业的浩瀚江湖 英雄豪杰们或乘风破浪、月入千万&#xff0c;或步履蹒跚、颗粒无收&#xff0c;这背后的奥秘究竟何在&#xff1f;是天意难测&#xff0c;还是人为疏忽&#xff1f;是制度的不完善&#xff0c;还是工具的滞后不前&#xff1f;答案就隐藏在你未曾注意的细节之…

公司招嵌入式开发岗位,为什么感觉一年比一年难?

最近看到一个问题&#xff1a; 是一个HR在吐槽招不到嵌入式开发的人才。 这句话&#xff0c;难免会误导一些想入行嵌入式的同学&#xff0c;卧槽&#xff0c;这么缺人?赶紧冲&#xff01; 哼次哼次学完一堆技术栈&#xff0c;一投简历&#xff0c;一个面试机会都没有。 这就是…

24路电磁锁主板在智能存储系统中的作用

在无人值守场景中&#xff0c;如自助服务机、智能生鲜柜、共享储物柜等&#xff0c;使用24路电磁锁主板可以集成身份识别技术&#xff0c;将用户的验证结果转化为相应的开锁动作&#xff0c;提升用户体验和运营效率&#xff0c;是实现智能存储系统高效、安全和自动化运行的关键…

Kubernetes的五大开源存储项目

在Kubernetes中&#xff0c;关于数据的持久化管理是一种挑战&#xff0c;对此&#xff0c;社区提供了多种存储的解决方案&#xff0c;这些方案旨在简化和优化容器化应用程序的持久化数据管理。 现介绍 Kubernetes 的五大开源存储项目&#xff0c;带你了解开源存储解决方案的多…

unity后期

unity|后处理篇 前言一、Post-Processing 1、 Post-Processing的使用2、Post-Processing后处理效果 抗锯齿①、Ambient Occlusion 环境光遮蔽②、Auto Exposure 自动曝光③、Bloom 辉光/泛光④、Chromatic Aberration | 色差⑤、Color Grading 色调/颜色分级⑥、Depth Of Fiel…

锐捷网络携数据中心、以太全光等创新解决方案亮相2024MWC

在西班牙巴塞罗那举行的2024年世界移动通信大会(MWC)上,锐捷网络(下文简称“锐捷”)展示了将技术与应用充分融合的云数据中心、5G、光网络等产品及解决方案,帮助更多行业组织建设更贴近业务、智能、简单、高效、绿色低碳的网络基础设施,应对当下及未来的挑战,共同连接更广阔可能…

骨传导耳机好用吗?六大选购法则与避坑技巧大公开

在过去的两年里&#xff0c;骨传导耳机逐渐成为大众的新宠&#xff0c;这一趋势并不出人意料。毕竟长时间使用音量过大的传统入耳式耳机&#xff0c;多多少少会对我们的听力健康构成威胁。然而不同耳机对听力的潜在影响程度是有差异的。骨传导耳机好用吗&#xff1f;与传统耳机…

租床小程序|租床系统|租赁软件开发功能

随着移动互联网的普及&#xff0c;越来越多的人开始选择在线上完成各种租赁业务&#xff0c;而医院租床也不例外。在这个趋势下&#xff0c;开发一款租赁小程序成为了市场的必然需求。 租床小程序的功能 1、搜索与筛选 为了满足不同用户的需求&#xff0c;小程序应该提供设备…

android适配器adapter,Android程序员架构之路该如何继续学习

便于开发的插件、工具和第三方开源库 1.GsonFormat 使用方法&#xff1a;快捷键AltS也可以使用AltInsert选择GsonFormat&#xff0c;作用&#xff1a;速将json字符串转换成一个Java Bean&#xff0c;免去我们根据json字符串手写对应Java Bean的过程。 2.ButterKnife Zelezny …