日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot-短信验证码-快速入门Demo(含redis)(手把手教你开通阿里云短信服务到写出个最终代码来)

發布時間:2024/7/19 javascript 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot-短信验证码-快速入门Demo(含redis)(手把手教你开通阿里云短信服务到写出个最终代码来) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

B站小狂神-此博客的內容就是看了這個視頻的總結(博主自己寫的哦~并非轉載)
視頻鏈接-【狂神說】通俗易懂的阿里云短信業務實戰教程(露臉)


您是否還在為別人的項目有短信功能自己的卻沒有?
您是否還在為自己的項目沒有短信功能逼格不夠高而發愁?
您是否想要簡單了解下短信功能但網上的只有代碼沒有其他相關知識的介紹而發愁?

dont 擔心了!這篇博客是為了那些想簡單入手下短信服務的老哥而準備的~~(大佬勿噴)
主要介紹下阿里云的一些用戶操作(直接用最高權限的accessKeyId和key密碼也不現實是不是,需要分不同的用戶使用),簡單介紹下阿里云短信開通,包括添加短信模板和簽名(決定短信發送什么是不是)

您也可以點擊目錄,跳轉到您想看的部分去

文章目錄

  • 1.了解阿里云用戶權限操作(多圖警告)
  • 2.開通阿里云短信服務
    • 添加短信模板
    • 添加簽名
  • 3.編寫測試代碼(★★★)
    • 項目結構
    • 相關的配置文件
    • controller,service層代碼
    • 結果展示
  • 4.編寫可復用的微服務接口(暫時空著,微服務還沒學233)

1.了解阿里云用戶權限操作(多圖警告)


阿里云賬號大家申請之后,就可以使用阿里云的服務了,我們一般都是通過授權碼+id+密碼的方式來使用阿里云服務的,這次我們就用短信服務來做個小Demo,先登錄阿里云官網,按著下面的圖步驟來走。



創建一個用戶組,給他添加下短信權限,Sms

然后用戶也是差不多,

創建一個用戶給它添加到剛才那個組里面,這樣整個用戶就只能使用短信服務了,值得注意的是那個創建用戶的時候會告訴accessKeyId和accessKeySecret,記得把這兩個保存下來,特別是accessKeySecret只在你創建用戶的時候顯示,忘了的話只能刪除accessKeyId再新建一個了,這兩個是等會需要填到代碼里面的。老哥們注意下了,上面這些操作都是為了保護你的賬號,這個用戶組只能使用短信服務的,其他服務是是使用不了的。
(這個授權碼和密碼有點類似快遞小哥進你的小區,你給他發個授權碼和密碼,有一定的時效或者權限,總比直接告訴他你的賬號和密碼要安全多了)

2.開通阿里云短信服務


我們先在搜索框中輸入短信服務,背景就是我們點擊回車之后的啦樣子啦,注意那個國內服務,我們等下要設置的什么短信內容都是在這里設置的,看那個簽名管理,模板管理。說一說為什么要設置這兩個內容,這兩個決定你的短信發送是什么內容!

添加短信模板


注意那個模板CODE,必須審核通過才能用在代碼中!

再繼續完成一些相關的內容補充,點擊提交就好了。

添加簽名


之后就是簽名管理,也是一個類似的操作。這個簽名就是說明你是哪個公司或者是什么項目的。我寫學習之星是因為某個群里我的外號叫學習之星2333。注意,這個簽名也是必須通過了才能在代碼中寫“學習之星”的!

這兩個需要人工審核,不過感覺快很多的,大概20分鐘左右吧。

3.編寫測試代碼(★★★)

項目結構

先大概看看項目結構吧,不復雜的,代碼中我也會寫一些注釋方便大家理解。

相關的配置文件

pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><!-- 阿里云短信依賴 --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.1.0</version></dependency><!--fastjson,用來解析json--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.60</version></dependency><!-- 加入redis相關的依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency></dependencies>

application.properties

// 服務端口 server.port=8080// redis 相關的配置 spring.redis.host=127.0.0.1 spring.redis.port=6379

controller,service層代碼

service層
SendSms 接口

package com.example.sms.service;import org.springframework.stereotype.Service;import java.util.Map;public interface SendSms {/*** 發送短信驗證碼* @param phoneNum 手機號* @param templateCode 模板號* @param code 驗證碼* @return*/public boolean send (String phoneNum, String templateCode, Map<String, Object> code); }

SendSmsImpl 實現類
注意替換accessKeyId,accessKeySecret,還有request.putQueryParameter方法中的一些內容!!

/*** 發送短信驗證碼* @param phoneNum 手機號* @param templateCode 模板號* @param code 驗證碼* @return*/ @Service public class SendSmsImpl implements SendSms {@Overridepublic boolean send(String phoneNum, String templateCode, Map<String, Object> code) {// 連接阿里云DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "請替換為你的accessKeyId", "請替換為你的accessKeySecret");IAcsClient client = new DefaultAcsClient(profile);// 構建請求CommonRequest request = new CommonRequest();request.setMethod(MethodType.POST);// 這些內容不要動,是人家阿里爸爸弄出來的,咱不用管request.setDomain("dysmsapi.aliyuncs.com");request.setVersion("2017-05-25");// 自己的內容,此處 SendSms 為發送驗證碼request.setAction("SendSms");//自定義的參數(手機號,驗證碼,簽名,模板! )//這是我的內容,請結合你的情況修改為你的東西!!!request.putQueryParameter( "PhoneNumbers",phoneNum);request.putQueryParameter( "SignName","學習之星");request.putQueryParameter( "TemplateCode","SMS_189620774");request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code));try {CommonResponse response = client.getCommonResponse(request);// 在控制臺上打印出返回信息System.out.println(response.getData());// 返回請求信息是否成功return response.getHttpResponse().isSuccess();} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}return false;} }

controller層

PS:像這種注解@GetMapping("/send/{phone}") ,瀏覽器URL對應的就是http://localhost:8080/send/123456
不要寫成了什么 http://localhost:8080/send/phone=15894621650 這樣是接受不到的!!
該接口應該使用get方法訪問,不是post方法!!(接口測試工具中要注意下)

@RestController @CrossOrigin //跨域支持 public class SmsApiController {@Autowiredprivate SendSms sendSms;@Autowiredprivate RedisTemplate<String, String> redisTemplate;@GetMapping("/send/{phone}")public String code(@PathVariable("phone") String phone) {//調用發送方法,模擬真實業務,redisString code = redisTemplate.opsForValue().get(phone);if (!StringUtils.isEmpty(code)) {return phone + ":" + code + "已存在,還沒有過期";}// 生成驗證碼并且存儲到 redis 中code = UUID.randomUUID().toString().substring(0, 4);HashMap<String, Object> param = new HashMap<>();param.put("code", code);boolean isSend = sendSms.send(phone, "SMS_189620774", param);if (isSend) {redisTemplate.opsForValue().set(phone, code, 600, TimeUnit.SECONDS);return phone + ":" + code + "發送成功!";} else {return "發送失敗!";}} }

結果展示

接口測試工具效果:

手機接收到的效果:

4.編寫可復用的微服務接口(暫時空著,微服務還沒學233)

結合你的具體業務吧233

謝謝您能看到結尾~
原人生的路上,你我共勉~

總結

以上是生活随笔為你收集整理的SpringBoot-短信验证码-快速入门Demo(含redis)(手把手教你开通阿里云短信服务到写出个最终代码来)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。