最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot實(shí)現(xiàn)阿里云通信短信服務(wù)有關(guān)短信驗(yàn)證碼的發(fā)送功能

 更新時(shí)間:2017年08月17日 09:43:28   作者:喝酒不騎馬  
短信驗(yàn)證碼是通過(guò)發(fā)送驗(yàn)證碼到手機(jī)的一種有效的驗(yàn)證碼系統(tǒng)。主要用于驗(yàn)證用戶手機(jī)的合法性及敏感操作的身份驗(yàn)證。下面通過(guò)本文大家分享Springboot實(shí)現(xiàn)阿里云通信短信服務(wù)有關(guān)短信驗(yàn)證碼的發(fā)送功能,一起看看吧

前言

短信驗(yàn)證碼是通過(guò)發(fā)送驗(yàn)證碼到手機(jī)的一種有效的驗(yàn)證碼系統(tǒng)。主要用于驗(yàn)證用戶手機(jī)的合法性及敏感操作的身份驗(yàn)證。

現(xiàn)在市面上的短信服務(wù)平臺(tái)有很多。大家在選擇的時(shí)候未免會(huì)有些不好抉擇。本人建議選擇短信服務(wù)商應(yīng)遵循以下幾點(diǎn):

  1. 服務(wù)商知名度高,業(yè)務(wù)流量大。(這樣的平臺(tái)可信度高)
  2. 服務(wù)穩(wěn)定,不能經(jīng)常宕機(jī)。(保證自身業(yè)務(wù)的流暢運(yùn)行)
  3. 文檔全面詳細(xì)。(沒(méi)文檔怎么玩?)

最近的一個(gè)項(xiàng)目中,注冊(cè)和修改密碼時(shí)需要用到短信驗(yàn)證碼校驗(yàn)手機(jī)號(hào)的功能。本人也是對(duì)比幾家后,直接選擇阿里云通信的短信服務(wù)。(本身項(xiàng)目服務(wù)器也是部署在阿里云上,但之前并不知道阿里云有短信服務(wù),早知道阿里有的話就不會(huì)浪費(fèi)時(shí)間找其他平臺(tái)了)。廢話不多說(shuō),下面直接開始短信驗(yàn)證服務(wù)教程。

準(zhǔn)備

1.登錄阿里云,開通阿里云通信短信服務(wù)。

2.申請(qǐng)accessKey

選擇右上角accessKeys,創(chuàng)建一個(gè)access key

這里寫圖片描述

3.進(jìn)入控制臺(tái),申請(qǐng)短信簽名。這個(gè)作用就是用于短信前面“【】”里面的名稱。輸入時(shí)不需要帶“【】”

這里寫圖片描述 

注意申請(qǐng)規(guī)范,要不然審核不會(huì)過(guò)。符合規(guī)范的話一般一個(gè)小時(shí)左右就能通過(guò)了。

我這里的簽名是“喝酒不騎馬”

這里寫圖片描述 

4.申請(qǐng)短信模版

模板類型選擇驗(yàn)證碼。注意,選擇驗(yàn)證碼后,模板替代變量只支持驗(yàn)證碼作為變量,且變量替換值<=6位數(shù)字或字母。

我的模板如下圖

這里寫圖片描述 

1.下載SDK包

https://help.aliyun.com/document_detail/55284.html

下載后,我們需要使用

aliyun-java-sdk-core-3.2.2.jar

aliyun-java-sdk-dysmsapi-1.0.0-SANPSHOT.jar

aliyun-sdk-mns-1.1.8.jar

這三個(gè)包

SpringBoot + Maven下的jar包配置

1.在工程的resources目錄下新建一個(gè)lib文件夾,將jar包復(fù)制進(jìn)去。

這里寫圖片描述

2.由于maven庫(kù)中沒(méi)有上述幾個(gè)jar包的依賴,所以需要將本地lib目錄下的jar包導(dǎo)入到maven中。并在pom.xml文件中填下如下依賴。

<dependency>
 <groupId>aliyun-message-sdk-core</groupId>
 <artifactId>aliyun-message-sdk-core</artifactId>
 <version>3.2.3</version>
 <scope>system</scope>
 <systemPath>${project.basedir}/src/main/resources/lib/aliyun-java-sdk-core-3.2.2.jar</systemPath>
</dependency>
<dependency>
 <groupId>aliyun-message-sdk-mns</groupId>
 <artifactId>aliyun-message-sdk-mns</artifactId>
 <version>1.1.8</version>
 <scope>system</scope>
 <systemPath>${project.basedir}/src/main/resources/lib/aliyun-sdk-mns-1.1.8.jar</systemPath>
</dependency>
<dependency>
 <groupId>aliyun-java-sdk-dysmsapi</groupId>
 <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
 <version>1.0.0</version>
 <scope>system</scope>
 <systemPath>${project.basedir}/src/main/resources/lib/aliyun-java-sdk-dysmsapi-1.0.0-SANPSHOT.jar</systemPath>
</dependency>

注意, <groupId>、<artifactId>、<version>隨意填寫。<scope>system</scope>必須要加,這表示導(dǎo)入本地的jar包。

${project.basedir}為項(xiàng)目的根路徑。

建立AliyunMessageUtil工具類

public class AliyunMessageUtil {
 private static final String product = "Dysmsapi";
 //產(chǎn)品域名,開發(fā)者無(wú)需替換
 private static final String domain = "dysmsapi.aliyuncs.com";
 // 此處需要替換成開發(fā)者自己的AK(在阿里云訪問(wèn)控制臺(tái)尋找)
 private static final String accessKeyId = "這里替換你的accessKeyId";
 private static final String accessKeySecret = "這里替換你的accessKeySecret";
 public static SendSmsResponse sendSms(Map<String, String> paramMap) throws com.aliyuncs.exceptions.ClientException {
  //可自助調(diào)整超時(shí)時(shí)間
  System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
  System.setProperty("sun.net.client.defaultReadTimeout", "10000");
  //初始化acsClient,暫不支持region化
  IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
  DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
  IAcsClient acsClient = new DefaultAcsClient(profile);
  //組裝請(qǐng)求對(duì)象-具體描述見(jiàn)控制臺(tái)-文檔部分內(nèi)容
  SendSmsRequest request = new SendSmsRequest();
  //必填:待發(fā)送手機(jī)號(hào)
  request.setPhoneNumbers(paramMap.get("phoneNumber"));
  //必填:短信簽名-可在短信控制臺(tái)中找到
  request.setSignName(paramMap.get("msgSign"));
  //必填:短信模板-可在短信控制臺(tái)中找到
  request.setTemplateCode(paramMap.get("templateCode"));
  //可選:模板中的變量替換JSON串,如模板內(nèi)容為"親愛(ài)的${name},您的驗(yàn)證碼為$[code]"時(shí),此處的值為
  request.setTemplateParam(paramMap.get("jsonContent"));
  //選填-上行短信擴(kuò)展碼(無(wú)特殊需求用戶請(qǐng)忽略此字段)
//  request.setSmsUpExtendCode(paramMap.get("extendCode"));
  //可選:outId為提供給業(yè)務(wù)方擴(kuò)展字段,最終在短信回執(zhí)消息中將此值帶回給調(diào)用者
//  request.setOutId(paramMap.get("outId"));
  //hint 此處可能會(huì)拋出異常,注意catch
  SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
  return sendSmsResponse;
 }
}

sendSms(Map<String, String> paramMap)方法是我封裝的方法。傳入的參數(shù)是paramMap,其中包含以下屬性:

phoneNumber:接受者手機(jī)號(hào)

msgSign:短信簽名名稱。在控制臺(tái)的短信簽名里能找到。

templateCode:短信模版的code。見(jiàn)控制臺(tái)中的模版code。

jsonContent:需要替換的變量的JSON字符串。對(duì)于驗(yàn)證碼來(lái)說(shuō),String jsonContent = "{\"number\":\"" + randomNum + "\"}";即可。其中randomNum是隨機(jī)生成的6位驗(yàn)證碼。

extendCode:上行短信模板的驗(yàn)證碼,不需要的話可以忽略

outId:擴(kuò)展字段,不需要?jiǎng)t可以忽略

調(diào)用demo

public String sendMsg() throws LgdServiceException, ClientException {
 String phoneNumber = "18888888888";
 String randomNum = createRandomNum(6);
 String jsonContent = "{\"number\":\"" + randomNum + "\"}";
 Map<String, String> paramMap = new HashMap<>();
 paramMap.put("phoneNumber", phoneNumber);
 paramMap.put("msgSign", "喝酒不騎馬");
 paramMap.put("templateCode", "xxxxxxxx");
 paramMap.put("jsonContent", jsonContent);
 SendSmsResponse sendSmsResponse = AliyunMessageUtil.sendSms(paramMap);
 if(!(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK"))) {
  if(sendSmsResponse.getCode() == null) {
   //這里可以拋出自定義異常
  }
  if(!sendSmsResponse.getCode().equals("OK")) {
    //這里可以拋出自定義異常
  }
 }
}
/**
 * 生成隨機(jī)數(shù)
 * @param num 位數(shù)
 * @return
 */
public static String createRandomNum(int num){
 String randomNumStr = "";
 for(int i = 0; i < num;i ++){
  int randomNum = (int)(Math.random() * 10);
  randomNumStr += randomNum;
 }
 return randomNumStr;
}

總結(jié)

短信效果如圖所示

這里寫圖片描述 

對(duì)于驗(yàn)證碼的校驗(yàn),可參見(jiàn)我的另一篇博文SpringBoot實(shí)現(xiàn)短信驗(yàn)證碼校驗(yàn).

以上所述是小編給大家介紹的Springboot實(shí)現(xiàn)阿里云通信短信服務(wù)有關(guān)短信驗(yàn)證碼的發(fā)送功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Zookeeper的選舉機(jī)制詳解

    Zookeeper的選舉機(jī)制詳解

    Zookeeper的選舉機(jī)制是基于ZAB協(xié)議的Paxos變種,通過(guò)LOOKING、PROPOSAL、ACCEPT和COMMIT四個(gè)階段,確保集群中只有一個(gè)領(lǐng)導(dǎo)節(jié)點(diǎn),選舉過(guò)程中,服務(wù)器通過(guò)投票和收集投票信息,確定ZXID和SID來(lái)選擇領(lǐng)導(dǎo)者,FastLeaderElection算法優(yōu)化了選舉過(guò)程,提高選舉效率
    2025-02-02
  • SpringSecurity自定義資源攔截規(guī)則及登錄界面跳轉(zhuǎn)問(wèn)題

    SpringSecurity自定義資源攔截規(guī)則及登錄界面跳轉(zhuǎn)問(wèn)題

    這篇文章主要介紹了SpringSecurity自定義資源攔截規(guī)則及登錄界面跳轉(zhuǎn)問(wèn)題,我們想要自定義認(rèn)證邏輯,就需要?jiǎng)?chuàng)建一些原來(lái)不存在的bean,這個(gè)時(shí)候就可以使@ConditionalOnMissingBean注解,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-12-12
  • Java純代碼實(shí)現(xiàn)導(dǎo)出文件為壓縮包

    Java純代碼實(shí)現(xiàn)導(dǎo)出文件為壓縮包

    這篇文章主要為大家詳細(xì)介紹了Java如何代碼實(shí)現(xiàn)導(dǎo)出文件為壓縮包,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • springcloud微服務(wù)基于redis集群的單點(diǎn)登錄實(shí)現(xiàn)解析

    springcloud微服務(wù)基于redis集群的單點(diǎn)登錄實(shí)現(xiàn)解析

    這篇文章主要介紹了springcloud微服務(wù)基于redis集群的單點(diǎn)登錄實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java設(shè)計(jì)模式之外觀模式

    Java設(shè)計(jì)模式之外觀模式

    這篇文章介紹了Java設(shè)計(jì)模式之外觀模式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • java自帶命令行工具jmap、jhat與jinfo的使用實(shí)例代碼詳解

    java自帶命令行工具jmap、jhat與jinfo的使用實(shí)例代碼詳解

    本篇文章主要通過(guò)代碼實(shí)例對(duì)java自帶命令行工具jmap、jhat與jinfo的使用做出了詳解,需要的朋友可以參考下
    2017-04-04
  • Spring?Task任務(wù)調(diào)度的實(shí)現(xiàn)示例

    Spring?Task任務(wù)調(diào)度的實(shí)現(xiàn)示例

    本文主要介紹了Spring?Task任務(wù)調(diào)度的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java應(yīng)用服務(wù)器之tomcat會(huì)話復(fù)制集群配置的示例詳解

    Java應(yīng)用服務(wù)器之tomcat會(huì)話復(fù)制集群配置的示例詳解

    這篇文章主要介紹了Java應(yīng)用服務(wù)器之tomcat會(huì)話復(fù)制集群配置的相關(guān)知識(shí),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java之URLEncoder、URLDecoder、Base64編碼與解碼方式

    Java之URLEncoder、URLDecoder、Base64編碼與解碼方式

    這篇文章主要介紹了Java之URLEncoder、URLDecoder、Base64編碼與解碼方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • idea 列編輯模式取消的操作

    idea 列編輯模式取消的操作

    這篇文章主要介紹了idea 列編輯模式取消的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論

广灵县| 玛沁县| 清水河县| 军事| 光泽县| 荥阳市| 景德镇市| 饶阳县| 天水市| 蚌埠市| 永登县| 邻水| 南平市| 闻喜县| 麟游县| 蒙城县| 河池市| 长汀县| 独山县| 丹巴县| 平顶山市| 河池市| 贵德县| 平定县| 扬州市| 黔西| 河源市| 扎赉特旗| 万山特区| 义乌市| 万安县| 辰溪县| 长宁县| 鄂托克前旗| 汝阳县| 德令哈市| 天祝| 建宁县| 廉江市| 剑阁县| 浦北县|