您好,登錄后才能下訂單哦!
這期內(nèi)容當中小編將會給大家?guī)碛嘘P使用springboot如何實現(xiàn)一個短信驗證碼登錄功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
1
、構造手機驗證碼:使用 random 對象生成要求的隨機數(shù)作為驗證碼,例如 4 位驗證碼: 1000~9999 之間隨機數(shù);
2
、使用接口向短信平臺發(fā)送手機號和驗證碼數(shù)據(jù),然后短信平臺再把驗證碼發(fā)送到制定手機號上,接口參數(shù)一般包括:目標手機號,隨機驗證碼 (或包含失效時間),平臺接口地址,平臺口令;
3
、保存接口返回的信息(一般為 json 文本數(shù)據(jù),然后需轉換為 json 對象格式);
4
、將手機號 — 驗證碼、操作時間存入 Session 中,作為后面驗證使用;
5
、接收用戶填寫的驗證碼及其他數(shù)據(jù);
6
、對比提交的驗證碼與 Session 中的驗證碼是否一致,同時判斷提交動作是否在有效期內(nèi);
7
、驗證碼正確且在有效期內(nèi),請求通過,處理相應的業(yè)務。
<!--秒滴云的jar包--> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.11</version> </dependency>
等等需要去秒滴云官方下載文檔,下面是編寫的一個 config 文檔,專門存放一些參數(shù)
public class HttpUtil { /** * 構造通用參數(shù)timestamp、sig和respDataType * * @return */ public static String createCommonParam() { // 時間戳 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請求 * * @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ù) 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(); // 讀取返回數(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; } /** * 回調測試工具方法 * * @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ù) 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(); // 讀取返回數(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; } }
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(),便會發(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 = "【小陶科技】登錄驗證碼:{"+runNumber().toString()+"},如非本人操作,請忽略此短信。"; /** * 驗證碼通知短信 */ 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(); // 提交請求 String result = HttpUtil.post(url, body); System.out.println("result:" + System.lineSeparator() + result); }
上述就是小編為大家分享的使用springboot如何實現(xiàn)一個短信驗證碼登錄功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。