国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看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
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产一区二区三区在线 | 亚洲一区中文字幕在线观看 | 亚洲美女精品视频 | 视频一区在线观看 | jizz中国zz女人18高潮 | 亚洲成av人片在线观看 | 国产成人久久av免费高清密臂 | 中文字幕一区二区三区在线观看 | 不卡一区在线观看 | 在线精品一区二区 | 国内精品一区二区三区 | 日韩精品三区 | 欧美大片黄 | 亚洲三级成人 | 日韩一级大片 | 亚洲欧美激情精品一区二区 | 欧美午夜一区二区三区免费大片 | 国产日 | 91丨九色丨国产 | 国产va| a∨色狠狠一区二区三区 | 日韩成人在线播放 | 午夜小电影 | 狠狠色综合网站久久久久久久 | 欧美成人精品一区二区三区 | 黄在线观看| 久久久精品一区 | 欧美日韩在线一区二区 | 日韩成人在线一区 | 日韩不卡一二三 | 日韩av专区 | 久久99精品久久久久久琪琪 | 久久久精品亚洲 | 国产精品亚洲综合 | 亚洲 欧美 精品 | 日韩欧美一二三 | 欧美一二 | 国产成年人在线观看 | 中文国产在线观看 | 黄网站涩免费蜜桃网站 | 精品国产一区二区三区久久久蜜 |