大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java實現短信驗證的方法

Java實現短信驗證的方法

更新時間:2022-07-12 11:50:53 來源:動力節點 瀏覽1205次

Java實現短信驗證的方法是什么?動力節點小編來告訴大家。

1.短信接口平臺

首先需要一個短信接口平臺,才能進行發短信的操作,網上一搜有很多,但是很多只送了幾條免費的次數,根本不夠使用。然后發現騰訊云也有這個服務,一下送了200條,用完了還是得自己買。不過現在測試,200條夠用了。

短信接口平臺需要實名,驗證什么的,需要申請短信的簽名和模板,也就是發送的標題和內容,需要審核。騰訊云短信地址。請注意寫的要求,并不是你想發送什么都可以。審核不能過。

創建簽名需要有個人實名的網站,或已發布的小程序/公眾號,或已上線的APP,請注意!

2.依賴引入

以maven方式引入依賴jar包

com.qcloud cmq-http-client 1.0.7 com.tencentcloudapi tencentcloud-sdk-java 3.1.390

3.常量類

號內容都需要替換為自己對應的,在騰訊云中找到這些常量,寫入

SMSSECREID與SMSSECREKEY查詢地址:CAM密匙查詢

注意這些的填寫,一個錯了將會導致發送不成功,官方文檔對于每個參數都有詳細的解釋,告訴你在哪里找到它。

/**
短信常量類
*/
public class Constants {
/**
短信 appid
*/
public static final String SMSAPPID="******";
/
騰訊云賬戶密鑰對: secretId
*/
public static final String SMSSECREID="******";
/
騰訊云賬戶密鑰對: secretKey
*/
public static final String SMSSECREKEY="******";
/
SmsSdkAppid
*/
public static final String SMSSDKAPPID="******";
/
sms sign : sms簽名
*/
public static final String SMSSIGN="******";
/
sms 短信模板id:
*/
public static final String SMSTEMPLATEID="********";
}

4.Service類

短信發送實現返回,是否發送成功的提示

package com.example.service;
import com.example.pojo.Constants;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
//導入可選配置類
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
// 導入對應SMS模塊的client
import com.tencentcloudapi.sms.v20210111.SmsClient;
// 導入要請求接口對應的request response類
import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
import org.springframework.stereotype.Service;
/**
Tencent Cloud Sms Sendsms
/
@Service
public class SendSmsService {
public String sendSms(String valcode, String[] phoneNumbers) {
try {

必要步驟:

* 實例化一個認證對象,入參需要傳入騰訊云賬戶密鑰對secretId,secretKey。

* 這里采用的是從環境變量讀取的方式,需要在環境變量中先設置這兩個值。

* 你也可以直接在代碼中寫死密鑰對,但是小心不要將代碼復制、上傳或者分享給他人,

* 以免泄露密鑰對危及你的財產安全。

* CAM密匙查詢: https://console.cloud.tencent.com/cam/capi*/

Credential cred = new Credential(Constants.SMSSECREID, Constants.SMSSECREKEY);

     // 實例化一個http選項,可選,沒有特殊需求可以跳過
     HttpProfile httpProfile = new HttpProfile();
     // 設置代理

// httpProfile.setProxyHost(“host”);

// httpProfile.setProxyPort(port);

/* SDK默認使用POST方法。

* 如果你一定要使用GET方法,可以在這里設置。GET方法無法處理一些較大的請求 /

httpProfile.setReqMethod(“POST”);

/ SDK有默認的超時時間,非必要請不要進行調整

* 如有需要請在代碼中查閱以獲取最新的默認值 /

httpProfile.setConnTimeout(60);

/ SDK會自動指定域名。通常是不需要特地指定域名的,但是如果你訪問的是金融區的服務

* 則必須手動指定域名,例如sms的上海金融區域名: sms.ap-shanghai-fsi.tencentcloudapi.com */

httpProfile.setEndpoint(“sms.tencentcloudapi.com”);

        /* 非必要步驟:
         * 實例化一個客戶端配置對象,可以指定超時時間等配置 */
        ClientProfile clientProfile = new ClientProfile();
        /* SDK默認用TC3-HMAC-SHA256進行簽名
         * 非必要請不要修改這個字段 */
        clientProfile.setSignMethod("HmacSHA256");
        clientProfile.setHttpProfile(httpProfile);
        /* 實例化要請求產品(以sms為例)的client對象
         * 第二個參數是地域信息,可以直接填寫字符串ap-guangzhou,或者引用預設的常量 */
        SmsClient client = new SmsClient(cred, "ap-guangzhou", clientProfile);
        /* 實例化一個請求對象,根據調用的接口和實際情況,可以進一步設置請求參數
         * 你可以直接查詢SDK源碼確定接口有哪些屬性可以設置
         * 屬性可能是基本類型,也可能引用了另一個數據結構
         * 推薦使用IDE進行開發,可以方便的跳轉查閱各個接口和數據結構的文檔說明 */
        SendSmsRequest req = new SendSmsRequest();
        /* 填充請求參數,這里request對象的成員變量即對應接口的入參
         * 你可以通過官網接口文檔或跳轉到request對象的定義處查看請求參數的定義
         * 基本類型的設置:
         * 幫助鏈接:
         * 短信控制臺: https://console.cloud.tencent.com/sms/smslist
         * sms helper: https://cloud.tencent.com/document/product/382/3773 */
        /* 短信應用ID: 短信SdkAppid在 [短信控制臺] 添加應用后生成的實際SdkAppid,示例如1400006666 */
        String appid = Constants.SMSAPPID;
        req.setSmsSdkAppId(appid);
        /* 短信簽名內容: 使用 UTF-8 編碼,必須填寫已審核通過的簽名,簽名信息可登錄 [短信控制臺] 查看 */
        String sign = Constants.SMSSIGN;
        req.setSignName(sign);
        /* 國際/港澳臺短信 senderid: 國內短信填空,默認未開通,如需開通請聯系 [sms helper] */

// String senderid = “xxx”;

// req.setSenderId(senderid);

        /* 用戶的 session 內容: 可以攜帶用戶側 ID 等上下文信息,server 會原樣返回 */

// String session = “xxx”;

// req.setSessionContext(session);

        /* 短信碼號擴展號: 默認未開通,如需開通請聯系 [sms helper] */

// String extendcode = “xxx”;

// req.setExtendCode(extendcode);

        /* 模板 ID: 必須填寫已審核通過的模板 ID。模板ID可登錄 [短信控制臺] 查看 */
        String templateID = Constants.SMSTEMPLATEID;
        req.setTemplateId(templateID);
        /* 下發手機號碼,采用 e.164 標準,+[國家或地區碼][手機號]
         * 示例如:+8613711112222, 其中前面有一個+號 ,86為國家碼,13711112222為手機號,最多不要超過200個手機號*/

// String[] phoneNumbers = {"+8621212313123", “+8612345678902”, “+8612345678903”};

req.setPhoneNumberSet(phoneNumbers);

       /* 模板參數: 若無模板參數,則設置為空*/
        String[] templateParams = {valcode};
        req.setTemplateParamSet(templateParams);
        /* 通過 client 對象調用 SendSms 方法發起請求。注意請求方法名與請求對象是對應的
         * 返回的 res 是一個 SendSmsResponse 類的實例,與請求對象對應 */
        SendSmsResponse res = client.SendSms(req);
        // 輸出json格式的字符串回包
        System.out.println(SendSmsResponse.toJsonString(res));
        // 也可以取出單個值,你可以通過官網接口文檔或跳轉到response對象的定義處查看返回字段的定義
        //System.out.println(res.getRequestId());
    } catch (TencentCloudSDKException e) {
        e.printStackTrace();
        return "發送出了點問題";
    }
    return "短信發送成功!請注意接收";
}

5.測試

輸入自己的手機號測試,測試正常,成功收到短信

/*
*短信測試類
*/
@Autowired
private SendSmsService sendSmsService;
@Test
void sendSms(){
sendSmsService.sendSms(“666666”, new String[] {“86***********”});
}

6.控制類

整合頁面和控制類,發送短信

從頁面輸入手機號,獲取短信

再對驗證碼進行驗證、提示

/*
短信驗證碼
*/
@Autowired
private SendSmsService sendSmsService;
@RequestMapping("/getSmsCode")
public String getSmsCode(HttpSession session, String tel, Model model) {
String SmsCode = RondomCode.randomCode();
session.setAttribute(“SmsCode”,SmsCode);
String tip = sendSmsService.sendSms(SmsCode, new String[] {tel});
model.addAttribute(“tel”,tel);
model.addAttribute(“tip”,tip);
return “login”;
}
@RequestMapping("/doRegister")
public String doRegister(HttpSession session,String InputSmsCode,Model model) {
String SmsCode = (String) session.getAttribute(“SmsCode”);
//限制用戶必須先輸入驗證碼,才能提交請求
if (!InputSmsCode.equals(SmsCode)){
System.out.println(“驗證碼有誤”);
model.addAttribute(“tip”,“驗證碼有誤”);
return “login”;
}
return “index”;
}

7.登錄頁

添加js增加優化體驗,限制用戶每60秒才能點擊一次發送驗證碼請求和對手機號格式以正則表達式效驗

/短信按鈕JS/
c = 60;
function SmsTiming() {
$("#getSmsCode").text(c + “秒后重新獲取”);
//console.log?;
// 1秒延時調用自己
myVar = setTimeout(function () {
SmsTiming()
}, 1000);
c -= 1;
//設定條件跳出
if (c == -1) {
clearTimeout(myVar); //停止
$("#getSmsCode").removeAttr(“disabled”); //移除禁用屬性
$("#getSmsCode").text(“獲取驗證碼”); //重新顯示按鈕
c = 60; //重新初始化 倒計時時間
}
};
//點擊按鈕調用,添加屬性禁用按鈕
//調用 SmsTiming()
$("#getSmsCode").click(function () {
var SmsInput = $(“input[name=‘tel’]”).val();
var smsRegExp = new RegExp("^((13[0-9])|(17[0-1,6-8])|(15[^4,\\\\D])|(18[0-9]))\\d{8}$");
if (SmsInput == null || SmsInput == ' ') {
    alert("請先填寫手機號!");
    return false;
} else if (!smsRegExp.test(SmsInput)) {
    alert("請檢查你的手機格式!");
    return false;
}
$("#getSmsCode").attr("disabled", "disabled");
SmsTiming();
return true;
});

電話: 獲取驗證碼

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日本a∨在线观看 | 奇米影视8888 | 女性一级全黄生活片免费看 | 国产成人综合久久精品红 | 免费看羞羞视频的网站 | 人人干人| 国产成人拍精品视频网 | 天天干夜夜 | 成人三级视频在线观看 | 丁香午夜 | 一本毛片| 久久我们这里只有精品国产4 | 国产午夜在线观看 | 精品久久久久不卡无毒 | 欧美色黄毛片 | 国产一区二区在线观看视频 | 麻豆传煤一区免费入 | 二级毛片全部 | 五月综合在线 | 四虎影院在线播放 | 国产在线91精品入口首页 | 狠狠干夜夜草 | 91在线永久 | 欧美一级二级aaa免费视频 | 中文字幕亚洲无线码在线一区 | 精品国精品国产自在久国产应用 | 羞污影院| 国产在线观看91 | 欧美性xxxx另类 | 天天操天天干天天拍 | 国产成人亚洲综合小说区 | 国产精品资源在线观看 | 91中文在线 | 国产成人精品一区 | 久久九九综合 | 亚洲精品欧美精品国产精品 | 欧美日本综合一区二区三区 | 四虎国产精品免费视 | 色婷婷综合激情 | 亚洲美女在线观看播放 | 在线观看国产91 |