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.pswp.cn/news/711982.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711982.shtml
英文地址,請注明出處:http://en.pswp.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;但實際上大部分人之所以過敏是因為對貓身上一種微小的蛋白質過敏。這種導致過敏的蛋白質附著在貓咪的一些皮屑上。我們都知道貓咪…

前端架構: 腳手架通用框架封裝之入口文件開發(教程一)

腳手架入口文件開發 創建腳手架項目: abc-cli $ mkdir abc-cli && cd abc-cli 全局安裝 lerna, $ npm i -g lerna 基于 lerna 完成項目初始化 $ lerna init 基于 lerna 創建腳手架 cli $ lerna create cli一路回車 好現在生成了一個 cli 的模板&#xff0c;目前需要…

Qt 中Json的構造和解析簡單例子

概述: Qt中使用Json比較方便&#xff0c;不像純C需要導入CJson RapidJson JsonCpp等第三方的庫&#xff0c;主要使用到QJsonDocument、QJsonObject對象即可 1、如何構造一個json字符串 假如我們需要構造 {"cmd":"1001","data":{"content&q…

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;我們可以指定文件名、操作模式、編碼信…

1552.平衡二叉樹

輸入格式 第一行包含整數 N&#xff0c;表示總插入值數量。第二行包含 N 個不同的整數&#xff0c;表示每個插入值。 輸出格式 輸出得到的 AVL 樹的根是多少。 數據范圍 1≤N≤20 輸入樣例1&#xff1a; 5 88 70 61 96 120 輸出樣例1&#xff1a; 70 輸入樣例2&#xff1a…

商業江湖大揭秘:月入千萬與顆粒無收,究竟差了什么?

在商業的浩瀚江湖 英雄豪杰們或乘風破浪、月入千萬&#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、光網絡等產品及解決方案,幫助更多行業組織建設更貼近業務、智能、簡單、高效、綠色低碳的網絡基礎設施,應對當下及未來的挑戰,共同連接更廣闊可能…