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.hqwc.cn/news/501352.html

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

相关文章

mysql学习笔记4——表操作

表的创建 表的删除 在表中插入数据 插入多行数据只插入特定列数据 对插入数据限制约束条件 常用约束条件有&#xff1a; 非空约束&#xff08;not null&#xff09;&#xff1a;约束的字段不能为null 唯一约束&#xff08;unique&#xff09;&#xff1a;约束的字段不能重复…

本地maven库缓存导入私库

为了加速编译代码&#xff0c;想将本地maven缓存导入内网私库使用。 脚本网上搜的 #!/bin/bash # copy and run this script to the root of the repository directory containing files # this script attempts to exclude uploading itself explicitly so the script name …

【ArcPy】批量读取文件夹excel中XY并转为点shp

示例展示 代码 只读取excel中含有XY字段的文件&#xff0c;并将矢量命名为excel文件名称。 import os import pandas as pd import arcpy folder_path r"C:\Users\admin\Desktop\excelfile" extension"xlsx" files [file for file in os.listdir(folder…

即插即用篇 | YOLOv8 引入 DoubleAttention 注意力机制 | 《A2-Nets: Double Attention Networks》

论文名称:《A2-Nets: Double Attention Networks》 论文地址:https://arxiv.org/pdf/1810.11579.pdf 文章目录 1 原理2 源代码3 添加方式4 模型 yaml 文件template-backbone.yamltemplate-small.yamltemplate-large.yamltemplate-neck.yamlyolov8-C2

敏捷开发模型:一种灵活、协作和持续的软件开发方法

敏捷开发模型&#xff1a;一种灵活、协作和持续的软件开发方法 引言 在软件开发领域&#xff0c;随着市场需求的不断变化和技术的迅速发展&#xff0c;传统的瀑布模型逐渐暴露出其局限性。为了应对这些挑战&#xff0c;敏捷开发模型应运而生。敏捷开发模型强调灵活、协作和持…

PoC免写攻略

在网络安全领域&#xff0c;PoC&#xff08;Proof of Concept&#xff09;起着重要的作用&#xff0c;并且在安全研究、漏洞发现和漏洞利用等方面具有重要的地位。攻击方视角下&#xff0c;常常需要围绕 PoC 做的大量的工作。常常需要从手动测试开始编写 PoC&#xff0c;再到实…

Axure RP 9 for Mac 中文激活版:交互设计神器

axure mac 是专为UX专业人员和业务分析师设计的专业网站原型设计工具&#xff01;可以帮助他们快速创建应用程序和网站的线框&#xff0c;原型和规格&#xff01; 软件下载&#xff1a;Axure RP 9 for Mac v9.0.0.3741中文正式版下载 新功能包括一系列广泛的改进&#xff1a;全…

Lightroom Classic 2024 for Mac v13.0.2中文:摄影后期的强大助手

Adobe Lightroom Classic 2024是一款功能强大的照片编辑软件。无论你是专业摄影师还是热爱摄影的业余爱好者&#xff0c;lrC2024都将成为你实现创意的得力助手&#xff0c;让你的摄影作品更加出色和引人注目。 软件下载&#xff1a;Lightroom Classic 2024 for Mac v13.0.2中文…

小乌龟新建、合并分支

1、建分支 如果想创建完毕后直接切换到新分支可以勾选“切换到新分支”选项或者从菜单中选择“切换/检出”来切换分支 右键查看&#xff0c;再提交&#xff0c;指向新的分支。 2、合并分支 分支切换到dev后就可以对工作区的文件进行修改&#xff0c;然后提交到dev分支&#xf…

未来已来:智慧餐饮点餐系统引领餐饮业的数字化转型

时下&#xff0c;智慧餐饮点餐系统正在引领着餐饮业迈向更高的位置。今天&#xff0c;小编将与大家共同探讨智慧餐饮点餐系统的发展趋势、优势以及对餐饮业的影响。 一、智慧餐饮点餐系统的发展趋势 智慧餐饮点餐系统的出现填补了这一空白&#xff0c;它通过引入数字化技术&a…

springboot231基于SpringBoot+Vue的乡政府管理系统

乡政府管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装乡政府管理系统软件来发挥其高效…

DDOS攻击处理方法

DDoS&#xff08;分布式拒绝服务&#xff09;攻击是一种网络攻击&#xff0c;攻击者通过发送大量的请求&#xff0c;超过目标服务器的处理能力&#xff0c;导致服务器服务不可用。本文将介绍如何处理DDoS攻击&#xff0c;并提供几种防范措施。 1. 认识DDoS攻击 DDoS攻击通常通过…