一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - springboot短信驗證碼登錄功能的實現

springboot短信驗證碼登錄功能的實現

2021-08-04 09:39極客521 Java教程

這篇文章主要介紹了springboot短信驗證碼登錄功能的實現,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1 、構造手機驗證碼:使用 random 對象生成要求的隨機數作為驗證碼,例如 4 位驗證碼: 1000~9999 之間隨機數;

2 、使用接口向短信平臺發送手機號和驗證碼數據,然后短信平臺再把驗證碼發送到制定手機號上,接口參數一般包括:目標手機號,隨機驗證碼 (或包含失效時間),平臺接口地址,平臺口令;

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

4 、將手機號 — 驗證碼、操作時間存入 Session 中,作為后面驗證使用;

5 、接收用戶填寫的驗證碼及其他數據;

6 、對比提交的驗證碼與 Session 中的驗證碼是否一致,同時判斷提交動作是否在有效期內;

7 、驗證碼正確且在有效期內,請求通過,處理相應的業務。

一,首先添加一個 jar 包,工具類會用到。

  1. <!--秒滴云的jar包-->
  2. <dependency>
  3. <groupId>commons-codec</groupId>
  4. <artifactId>commons-codec</artifactId>
  5. <version>1.11</version>
  6. </dependency>

二、我這里只是編寫一個簡單的短信驗證功能,要是用其他的語音驗證。

等等需要去秒滴云官方下載文檔,下面是編寫的一個 config 文檔,專門存放一些參數

 

springboot短信驗證碼登錄功能的實現

三、編寫 http 請求工具類

  1. public class HttpUtil
  2. {
  3. /**
  4. * 構造通用參數timestamp、sig和respDataType
  5. *
  6. * @return
  7. */
  8. public static String createCommonParam()
  9. {
  10. // 時間戳
  11. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
  12. String timestamp = sdf.format(new Date());
  13.  
  14. // 簽名
  15. String sig = DigestUtils.md5Hex(Config.ACCOUNT_SID + Config.AUTH_TOKEN + timestamp);
  16.  
  17. return "×tamp=" + timestamp + "&sig=" + sig + "&respDataType=" + Config.RESP_DATA_TYPE;
  18. }
  19.  
  20. /**
  21. * post請求
  22. *
  23. * @param url
  24. * 功能和操作
  25. * @param body
  26. * 要post的數據
  27. * @return
  28. * @throws IOException
  29. */
  30. public static String post(String url, String body)
  31. {
  32. System.out.println("url:" + System.lineSeparator() + url);
  33. System.out.println("body:" + System.lineSeparator() + body);
  34.  
  35. String result = "";
  36. try
  37. {
  38. OutputStreamWriter out = null;
  39. BufferedReader in = null;
  40. URL realUrl = new URL(url);
  41. URLConnection conn = realUrl.openConnection();
  42.  
  43. // 設置連接參數
  44. conn.setDoOutput(true);
  45. conn.setDoInput(true);
  46. conn.setConnectTimeout(5000);
  47. conn.setReadTimeout(20000);
  48. conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  49. // 提交數據
  50. out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
  51. out.write(body);
  52. out.flush();
  53.  
  54. // 讀取返回數據
  55. in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
  56. String line = "";
  57. boolean firstLine = true; // 讀第一行不加換行符
  58. while ((line = in.readLine()) != null)
  59. {
  60. if (firstLine)
  61. {
  62. firstLine = false;
  63. } else
  64. {
  65. result += System.lineSeparator();
  66. }
  67. result += line;
  68. }
  69. } catch (Exception e)
  70. {
  71. e.printStackTrace();
  72. }
  73. return result;
  74. }
  75.  
  76. /**
  77. * 回調測試工具方法
  78. *
  79. * @param url
  80. * @param reqStr
  81. * @return
  82. */
  83. public static String postHuiDiao(String url, String body)
  84. {
  85. String result = "";
  86. try
  87. {
  88. OutputStreamWriter out = null;
  89. BufferedReader in = null;
  90. URL realUrl = new URL(url);
  91. URLConnection conn = realUrl.openConnection();
  92.  
  93. // 設置連接參數
  94. conn.setDoOutput(true);
  95. conn.setDoInput(true);
  96. conn.setConnectTimeout(5000);
  97. conn.setReadTimeout(20000);
  98.  
  99. // 提交數據
  100. out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
  101. out.write(body);
  102. out.flush();
  103.  
  104. // 讀取返回數據
  105. in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
  106. String line = "";
  107. boolean firstLine = true; // 讀第一行不加換行符
  108. while ((line = in.readLine()) != null)
  109. {
  110. if (firstLine)
  111. {
  112. firstLine = false;
  113. } else
  114. {
  115. result += System.lineSeparator();
  116. }
  117. result += line;
  118. }
  119. } catch (Exception e)
  120. {
  121. e.printStackTrace();
  122. }
  123. return result;
  124. }
  125. }

四、生成四位數的方法

  1. public static String runNumber() {
  2. String str="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  3. StringBuilder sb=new StringBuilder(4);
  4. for(int i=0;i<4;i++)
  5. {
  6. char ch=str.charAt(new Random().nextInt(str.length()));
  7. sb.append(ch);
  8. }
  9. System.out.println(sb.toString());
  10. String code = sb.toString();
  11. return code;
  12. }

執行方法 execute(),便會發送成功

  1. public class IndustrySMS
  2. {
  3. private static String operation = "/industrySMS/sendSMS";
  4.  
  5. private static String accountSid = Config.ACCOUNT_SID;
  6. private static String to = "15342349382";
  7. private static String smsContent = "【小陶科技】登錄驗證碼:{"+runNumber().toString()+"},如非本人操作,請忽略此短信。";
  8.  
  9. /**
  10. * 驗證碼通知短信
  11. */
  12. public static void execute()
  13. {
  14. String tmpSmsContent = null;
  15. try{
  16. tmpSmsContent = URLEncoder.encode(smsContent, "UTF-8");
  17. }catch(Exception e){
  18. }
  19. String url = Config.BASE_URL + operation;
  20. String body = "accountSid=" + accountSid + "&to=" + to + "&smsContent=" + tmpSmsContent
  21. + HttpUtil.createCommonParam();
  22.  
  23. // 提交請求
  24. String result = HttpUtil.post(url, body);
  25. System.out.println("result:" + System.lineSeparator() + result);
  26. }

到此這篇關于springboot短信驗證碼登錄功能的實現的文章就介紹到這了,更多相關springboot短信驗證碼登錄內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本高清全集免费观看 | 久久精品18 | sao虎影院桃红视频在线观看 | 国产一区国产二区国产三区 | 我的奶头被客人吸的又肿又红 | 欧美一级高清免费a | 无限在线看免费视频大全 | 91私密保健女子养生spa | 久久成人精品免费播放 | 国产午夜免费不卡精品理论片 | 四虎黄色影视 | 四虎一影院区永久精品 | 美女扒开胸罩露出奶 | 30分钟的高清视频在线观看 | chinesespank调教 | 性关系视频网站 | 女人把扒开给男人爽的 | 古装一级无遮挡毛片免费观看 | 日本视频免费看 | 欧美精品一区二区三区久久 | 久久偷拍人| 欧美精品亚洲精品日韩专区va | 男女性gif抽搐出入视频 | 午夜日本大胆裸艺术 | 国语视频高清在线观看 | 亚洲成人网在线 | 久久精品视在线观看85 | 亚洲 欧美 国产 在线观看 | 99精品久久久久久 | 国产高清自拍视频 | 四虎在线永久视频观看 | 色综合色狠狠天天久久婷婷基地 | 禁忌第一季第3季 | 精品国产欧美一区二区三区成人 | 国产精品天天看天天爽 | 高清在线一区二区 | 男生操男生 | 色综合天天综合网站中国 | www.国产自拍 | b站免费网站入口 | 国产成人手机在线好好热 |