激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java開發完整短信驗證碼功能的全過程

Java開發完整短信驗證碼功能的全過程

2022-02-17 15:16超哥CG_544 Java教程

利用短信驗證碼進行身份驗證是目前互聯網眾多產品常用的一種方式,那么這種短信驗證功能是如何實現的呢,下面這篇文章主要給大家介紹了關于Java開發完整短信驗證碼功能的相關資料,需要的朋友可以參考下

 

前言

現代互聯網項目中,很多場景下都需要使用一種叫做驗證碼的技術,常用的有圖片驗證碼,滑塊驗證碼,短信驗證碼等,本文章描述的就是短信驗證碼的一個使用教程,從0開始完成一個驗證碼功能的開發。

 

閑扯

是不是看著導語很高大上!!!

我才不會說是因為最近不知道寫啥才水的一篇文章

但是嘛,我要爭取做到水文章也水的特別認真,讓讀者可以根據本文的教程實現驗證碼功能

 

使用技術

  • Java:所使用的后端技術
  • JSP:所使用的前端技術
  • 阿里云短信服務:發送短信
  • Redis:存儲驗證碼 實現超時過期以及驗證功能

 

所需知識儲備

  • Java基礎知識
  • Ajax基礎
  • Redis基礎

 

實現步驟

首先我們需要找一個提供短信服務的商戶,隨便在哪里找都一樣,為了避免廣告嫌疑我就不在此推薦了,購買商家的短信服務后會拿到一些參數,比如說請求地址,請求方式,token等,如下圖所示

Java開發完整短信驗證碼功能的全過程

然后找到接口的調用樣例,按照調用樣例傳相應的參數即可實現短信發送

Java開發完整短信驗證碼功能的全過程

Java開發完整短信驗證碼功能的全過程

這步沒什么說的,就是調用API,完成這步之后,就可以發送短信了,當然這個是第一步,距離正式完成還差很遠。
這里有一個小的細節,就是我們發送短信,其中這個驗證碼是我們自己生成的,然后以參數的形式傳給接口,所以這里的驗證碼需要我們自己產生 貼一段產生驗證碼的代碼

// 僅供參考 根據業務去生成即可
	// 生成驗證碼
	StringBuilder builder = new StringBuilder();
	 for (int i = 0; i < 6; i++) {
	     int random = (int) (Math.random() * 10);
	     builder.append(random);
	 }
	 String code = builder.toString();

第二步要做的操作就是要將第一步發送的驗證碼,如果發送成功了的話,我們要將該驗證碼保存起來,方便后續的驗證,本人這里使用了SpringBoot整合Redis,直接使用RedisTemplente實現的,和原生實現是類似的,就是將驗證碼和手機號存入Redis。

	 // 其中的ResultEntity是我個人封裝的一個返回結果 保存的是發送短信的結果 成功則存入Redis
	 // setRedisKeyValueRemoteWithTimeOut 是自己封裝的一個方法 功能為存入redis并且設置超時時間 
	 // 發送驗證碼到phoneNum 獲取結果
	 ResultEntity<String> resultEntity = CrowdUtil.sendCodeShortMessage(
	         messageProperties.getHost(),
	         messageProperties.getPath(),
	         messageProperties.getMethod(),
	         phoneNum,
	         "注冊",
	         messageProperties.getAppCode(),
	         messageProperties.getSmsSignId(),
	         messageProperties.getTemplateId());
	 if (ResultEntity.SUCCESS.equals(resultEntity.getResult())) {
	     // 驗證碼
	     String code = resultEntity.getData();
	     // 設置key
	     String key = CrowdConstant.REDIS_CODE_PREFIX + phoneNum;
	     // 如果成功則將驗證碼存入Redis 過期時間300秒 獲取存入redis的結果
	     ResultEntity<String> saveCodeResultEntity = redisRemoteService.setRedisKeyValueRemoteWithTimeOut(key, code, 300, TimeUnit.SECONDS);
	     if (ResultEntity.SUCCESS.equals(saveCodeResultEntity.getResult())) {
	         return ResultEntity.successWithoutData();
	     } else {
	         return saveCodeResultEntity;
	     }

第三步實現短信驗證碼的驗證

這步驟實現的功能就是驗證短信驗證碼是否匹配,這步驟核心操作就是將驗證碼從Redis中取出來,和前端傳過來的數據進行比對,貼代碼

		// 可以無視其中的一些拼接操作,這些拼接操作就是做一下標識,作為key。
		// 核心是getRedisStringValueByKeyRemote方法 作用為獲取Redis中的驗證碼
		// 這里有一個注意事項就是驗證碼使用過一次后需要刪除redis中的數據,避免二次驗證造成的數據不安全。
        // 獲取手機號
        String phoneNum = memberVO.getCardnum();
        // 拼接redis中的key
        String key = CrowdConstant.REDIS_CODE_PREFIX + phoneNum;
        // 根據key查詢redis 返回resultEntity 將value存入data
        ResultEntity<String> redisResultEntity = redisRemoteService.getRedisStringValueByKeyRemote(key);
        // 獲取結果集
        String result = redisResultEntity.getResult();

        if (ResultEntity.FAILED.equals(result)) {
            modelMap.addAttribute(CrowdConstant.ATTR_NAME_MESSAGE, redisResultEntity.getMessage());
            return "member-reg";
        }
        // 獲取redis的驗證碼
        String redisCode = redisResultEntity.getData();

        if (redisCode == null) {
            modelMap.addAttribute(CrowdConstant.ATTR_NAME_MESSAGE, CrowdConstant.MESSAGE_CODE_NOT_EXISTS);
            return "member-reg";
        }
        // 獲取輸入的驗證碼
        String code = memberVO.getCode();

        if (!Objects.equals(redisCode, code)) {
            modelMap.addAttribute(CrowdConstant.ATTR_NAME_MESSAGE, CrowdConstant.MESSAGE_CODE_FAILED);
            return "member-reg";
        }
        // 刪除redis中數據
        redisRemoteService.removeRedisKeyRemote(key);

到這里我們驗證碼幾乎就結束了,已經實現了流程,由于我的那個驗證碼套餐過期了,本人又十分貧窮,就沒有測試樣例啦,但是保證是可用的,前端調用方式直接一個Ajax請求調用發送驗證碼存儲redis,然后在例如測試或登錄的業務中,去匹配驗證碼即可。接下來給幾點拓展,各位可以自己實現

  1. 實現控制單手機號一天只能發送三條消息。
  2. 實現控制單ip一天只能發送是三條消息
  3. 實現消息60秒不能重復發送

 

總結

到此這篇關于Java開發完整短信驗證碼功能的文章就介紹到這了,更多相關Java短信驗證碼功能內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/qq_41739987/article/details/120713589

延伸 · 閱讀

精彩推薦
  • Java教程Java處理Webp圖片格式轉換的示例代碼

    Java處理Webp圖片格式轉換的示例代碼

    這篇文章主要介紹了Java處理Webp圖片格式轉換的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    nintha6172021-05-30
  • Java教程Java操作excel的三種常見方法實例

    Java操作excel的三種常見方法實例

    這篇文章主要給大家介紹了關于Java操作excel的三種常見方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    經理,天臺風好大6692021-09-02
  • Java教程java實現抽獎功能解析

    java實現抽獎功能解析

    這篇文章主要為大家詳細介紹了java實現抽獎功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    秀發如云7412021-08-24
  • Java教程java實現冒泡排序算法

    java實現冒泡排序算法

    冒泡排序(Bubble Sort)是一種簡單的排序算法。它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工...

    hebedich3582019-12-15
  • Java教程淺析java消息摘要與數字簽名

    淺析java消息摘要與數字簽名

    這篇文章給大家分析了關于java消息摘要與數字簽名的相關知識點內容,有興趣的朋友們可以學習下。...

    靜默虛空8532021-05-26
  • Java教程JVM核心教程之JVM運行與類加載全過程詳解

    JVM核心教程之JVM運行與類加載全過程詳解

    我們都知道一個java程序運行要經過編譯和執行,但是這太概括了,中間還有很多步驟,下面這篇文章主要給大家介紹了關于JVM核心教程之JVM運行與類加載全...

    AskHarries11142021-04-24
  • Java教程java根據List內對象的屬性排序方法

    java根據List內對象的屬性排序方法

    下面小編就為大家分享一篇java根據List內對象的屬性排序方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    Clannad_汐10742021-03-14
  • Java教程Java中Optional的使用指南

    Java中Optional的使用指南

    這篇文章主要給大家介紹了關于Java中Optional使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    申城異鄉人11322021-08-02
主站蜘蛛池模板: 视频在线91 | 国内精品一级毛片免费看 | 欧美一级做一a做片性视频 日韩黄色片免费看 | h视频免费在线观看 | 精品国产一区二区久久 | 国产一级αv片免费观看 | 久久久久久久黄色片 | 涩涩操| 蜜桃传媒视频麻豆第一区免费观看 | 中国成人在线视频 | 欧美成人做爰高潮片免费视频 | 中文字幕国产一区 | 136福利视频| 色蜜桃av| 免费在线观看毛片 | 国产在线地址 | 久久国产精品影视 | 黄色网址免费进入 | 国产一区二区三区四区精 | 久久精品视频网站 | 久久国产综合视频 | 国产精品久久久久久影院8一贰佰 | 九九热视频免费 | 91超在线| 免费看欧美一级特黄a大片 久久免费视频一区二区三区 | 欧美国产日韩在线观看成人 | 欧美精品久久久久久久久久 | 成人免费一区二区三区视频网站 | 色天使中文字幕 | 国产午夜精品理论片a级探花 | 亚洲第一激情 | 毛片在线视频观看 | 成人男女免费视频 | 99一区二区 | 超碰人人做人人爱 | 黄色影院网站 | 欧美一级黄色免费 | 日韩黄色免费观看 | 污片视频在线观看 | 色综合视频 | 毛片视频网址 |