亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springboot短信驗(yàn)證碼登錄功能的實(shí)現(xiàn)

 更新時(shí)間:2021年02月04日 10:22:03   作者:極客521  
這篇文章主要介紹了springboot短信驗(yàn)證碼登錄功能的實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1 、構(gòu)造手機(jī)驗(yàn)證碼:使用 random 對(duì)象生成要求的隨機(jī)數(shù)作為驗(yàn)證碼,例如 4 位驗(yàn)證碼: 1000~9999 之間隨機(jī)數(shù);

2 、使用接口向短信平臺(tái)發(fā)送手機(jī)號(hào)和驗(yàn)證碼數(shù)據(jù),然后短信平臺(tái)再把驗(yàn)證碼發(fā)送到制定手機(jī)號(hào)上,接口參數(shù)一般包括:目標(biāo)手機(jī)號(hào),隨機(jī)驗(yàn)證碼 (或包含失效時(shí)間),平臺(tái)接口地址,平臺(tái)口令;

3 、保存接口返回的信息(一般為 json 文本數(shù)據(jù),然后需轉(zhuǎn)換為 json 對(duì)象格式);

4 、將手機(jī)號(hào) — 驗(yàn)證碼、操作時(shí)間存入 Session 中,作為后面驗(yàn)證使用;

5 、接收用戶填寫(xiě)的驗(yàn)證碼及其他數(shù)據(jù);

6 、對(duì)比提交的驗(yàn)證碼與 Session 中的驗(yàn)證碼是否一致,同時(shí)判斷提交動(dòng)作是否在有效期內(nèi);

7 、驗(yàn)證碼正確且在有效期內(nèi),請(qǐng)求通過(guò),處理相應(yīng)的業(yè)務(wù)。

一,首先添加一個(gè) jar 包,工具類會(huì)用到。

<!--秒滴云的jar包-->
<dependency>
 <groupId>commons-codec</groupId>
 <artifactId>commons-codec</artifactId>
 <version>1.11</version>
</dependency>

二、我這里只是編寫(xiě)一個(gè)簡(jiǎn)單的短信驗(yàn)證功能,要是用其他的語(yǔ)音驗(yàn)證。

等等需要去秒滴云官方下載文檔,下面是編寫(xiě)的一個(gè) config 文檔,專門存放一些參數(shù)

三、編寫(xiě) http 請(qǐng)求工具類

public class HttpUtil
{
 /**
 * 構(gòu)造通用參數(shù)timestamp、sig和respDataType
 *
 * @return
 */
 public static String createCommonParam()
 {
  // 時(shí)間戳
  SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
  String timestamp = sdf.format(new Date());


  // 簽名
  String sig = DigestUtils.md5Hex(Config.ACCOUNT_SID + Config.AUTH_TOKEN + timestamp);


  return "×tamp=" + timestamp + "&sig=" + sig + "&respDataType=" + Config.RESP_DATA_TYPE;
 }


 /**
 * post請(qǐng)求
 *
 * @param url
 * 功能和操作
 * @param body
 * 要post的數(shù)據(jù)
 * @return
 * @throws IOException
 */
 public static String post(String url, String body)
 {
  System.out.println("url:" + System.lineSeparator() + url);
  System.out.println("body:" + System.lineSeparator() + body);


  String result = "";
  try
  {
   OutputStreamWriter out = null;
   BufferedReader in = null;
   URL realUrl = new URL(url);
   URLConnection conn = realUrl.openConnection();


   // 設(shè)置連接參數(shù)
   conn.setDoOutput(true);
   conn.setDoInput(true);
   conn.setConnectTimeout(5000);
   conn.setReadTimeout(20000);
   conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
   // 提交數(shù)據(jù)
   out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
   out.write(body);
   out.flush();


   // 讀取返回?cái)?shù)據(jù)
   in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
   String line = "";
   boolean firstLine = true; // 讀第一行不加換行符
   while ((line = in.readLine()) != null)
   {
   if (firstLine)
   {
    firstLine = false;
   } else
   {
    result += System.lineSeparator();
   }
   result += line;
   }
  } catch (Exception e)
  {
   e.printStackTrace();
  }
  return result;
 }


 /**
 * 回調(diào)測(cè)試工具方法
 *
 * @param url
 * @param reqStr
 * @return
 */
 public static String postHuiDiao(String url, String body)
 {
  String result = "";
  try
  {
   OutputStreamWriter out = null;
   BufferedReader in = null;
   URL realUrl = new URL(url);
   URLConnection conn = realUrl.openConnection();


   // 設(shè)置連接參數(shù)
   conn.setDoOutput(true);
   conn.setDoInput(true);
   conn.setConnectTimeout(5000);
   conn.setReadTimeout(20000);


   // 提交數(shù)據(jù)
   out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
   out.write(body);
   out.flush();


   // 讀取返回?cái)?shù)據(jù)
   in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
   String line = "";
   boolean firstLine = true; // 讀第一行不加換行符
   while ((line = in.readLine()) != null)
   {
   if (firstLine)
   {
    firstLine = false;
   } else
   {
    result += System.lineSeparator();
   }
   result += line;
   }
  } catch (Exception e)
  {
   e.printStackTrace();
  }
  return result;
 }
}

四、生成四位數(shù)的方法

public static String runNumber() {
 String str="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 StringBuilder sb=new StringBuilder(4);
 for(int i=0;i<4;i++)
 {
  char ch=str.charAt(new Random().nextInt(str.length()));
  sb.append(ch);
 }
 System.out.println(sb.toString());
 String code = sb.toString();
 return code;
}

執(zhí)行方法 execute(),便會(huì)發(fā)送成功

public class IndustrySMS
{
 private static String operation = "/industrySMS/sendSMS";


 private static String accountSid = Config.ACCOUNT_SID;
 private static String to = "15342349382";
 private static String smsContent = "【小陶科技】登錄驗(yàn)證碼:{"+runNumber().toString()+"},如非本人操作,請(qǐng)忽略此短信。";


 /**
 * 驗(yàn)證碼通知短信
 */
 public static void execute()
 {
  String tmpSmsContent = null;
  try{
   tmpSmsContent = URLEncoder.encode(smsContent, "UTF-8");
  }catch(Exception e){
  }
  String url = Config.BASE_URL + operation;
  String body = "accountSid=" + accountSid + "&to=" + to + "&smsContent=" + tmpSmsContent
   + HttpUtil.createCommonParam();


  // 提交請(qǐng)求
  String result = HttpUtil.post(url, body);
  System.out.println("result:" + System.lineSeparator() + result);
}

到此這篇關(guān)于springboot短信驗(yàn)證碼登錄功能的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)springboot短信驗(yàn)證碼登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • jackson反序列化時(shí)如何忽略不需要的字段

    jackson反序列化時(shí)如何忽略不需要的字段

    這篇文章主要介紹了jackson反序列化時(shí)如何忽略不需要的字段,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java讀取文件顯示進(jìn)度條的實(shí)現(xiàn)方法

    java讀取文件顯示進(jìn)度條的實(shí)現(xiàn)方法

    當(dāng)讀取一個(gè)大文件時(shí),一時(shí)半會(huì)兒無(wú)法看到讀取結(jié)果,就需要顯示一個(gè)進(jìn)度條,是程序員明白已經(jīng)讀了多少文件,可以估算讀取還需要多少時(shí)間,下面的代碼可以實(shí)現(xiàn)這個(gè)功能
    2014-01-01
  • Java實(shí)現(xiàn)自定義自旋鎖代碼實(shí)例

    Java實(shí)現(xiàn)自定義自旋鎖代碼實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)自定義自旋鎖代碼實(shí)例,Java自旋鎖是一種線程同步機(jī)制,它允許線程在獲取鎖時(shí)不立即阻塞,而是通過(guò)循環(huán)不斷嘗試獲取鎖,直到成功獲取為止,自旋鎖適用于鎖競(jìng)爭(zhēng)激烈但持有鎖的時(shí)間很短的情況,需要的朋友可以參考下
    2023-10-10
  • Java的注解原理詳解

    Java的注解原理詳解

    這篇文章主要介紹了Java的注解原理詳解,注解是JDK1.5引入的新特性,包含在java.lang.annotation包中,它是附加在代碼中的一些元信息,將一個(gè)類的外部信息與內(nèi)部成員聯(lián)系起來(lái),在編 譯、運(yùn)行時(shí)進(jìn)行解析和使用,需要的朋友可以參考下
    2023-10-10
  • 詳解Spring FactoryBean靈活創(chuàng)建復(fù)雜對(duì)象的秘密武器

    詳解Spring FactoryBean靈活創(chuàng)建復(fù)雜對(duì)象的秘密武器

    FactoryBean是Spring框架中用于創(chuàng)建復(fù)雜Bean的接口,通過(guò)編程方式控制Bean的創(chuàng)建過(guò)程,它允許開(kāi)發(fā)者自定義Bean的創(chuàng)建邏輯,適用于集成第三方庫(kù)、延遲初始化、動(dòng)態(tài)代理和統(tǒng)一管理資源等場(chǎng)景,本文介紹Spring FactoryBean創(chuàng)建復(fù)雜對(duì)象的相關(guān)操作,感興趣的朋友一起看看吧
    2025-02-02
  • java如何消除太多的if else判斷示例代碼

    java如何消除太多的if else判斷示例代碼

    這篇文章主要介紹了java如何消除太多的if else判斷,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Mybatis-plus多條件篩選分頁(yè)的實(shí)現(xiàn)

    Mybatis-plus多條件篩選分頁(yè)的實(shí)現(xiàn)

    本文主要介紹了Mybatis-plus多條件篩選分頁(yè),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • java實(shí)現(xiàn)幸運(yùn)抽獎(jiǎng)系統(tǒng)

    java實(shí)現(xiàn)幸運(yùn)抽獎(jiǎng)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)幸運(yùn)抽獎(jiǎng)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 詳解Java弱引用(WeakReference)的理解與使用

    詳解Java弱引用(WeakReference)的理解與使用

    這篇文章主要介紹了Java弱引用(WeakReference)的理解與使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 詳細(xì)分析Java Lambda表達(dá)式

    詳細(xì)分析Java Lambda表達(dá)式

    這篇文章主要介紹了Java Lambda表達(dá)式的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評(píng)論