java實(shí)現(xiàn)手機(jī)短信驗(yàn)證的基本思路
本文實(shí)例為大家分享了java實(shí)現(xiàn)手機(jī)短信驗(yàn)證的具體代碼,供大家參考,具體內(nèi)容如下
整體流程:
- 客戶填入手機(jī)號,通過客戶端點(diǎn)擊獲取驗(yàn)證碼按鈕,驗(yàn)證手機(jī)號是否有效,有效則客戶端發(fā)送請求到后臺服務(wù)器,客戶端開始倒計(jì)時(shí)60s,不通過則返回;
- 服務(wù)器,驗(yàn)證手機(jī)號是否被注冊或有效,通過則調(diào)用第三方的短信通信接口并發(fā)送相關(guān)數(shù)據(jù)(包括手機(jī)號和驗(yàn)證碼),然后回調(diào)結(jié)果,成功則將驗(yàn)證碼存入session,失敗則返回提示,不通過則返回。
- 客戶收到驗(yàn)證碼后在有效時(shí)間內(nèi),填入并發(fā)送請求。
- 服務(wù)器端,收到請求后,用戶發(fā)送過來的驗(yàn)證碼和事前放入session的驗(yàn)證碼做對比,相同通過,否則提示驗(yàn)證碼無效。
通過后,需要將session中的驗(yàn)證碼無效化,一般就是置為空。
第一步偽代碼:
function sendCaptcha(tel) { console.log("sendCaptcha: tel = " + tel); $.ajax({ type: 'post', url: '/sms/captcha/' + tel, dataType: "json", success: function (data) { console.log("sendCaptcha ==> success: data = " + eval(data)); if (data) { countdown(); b_code = false; } else { alert("您發(fā)送的頻率過快!"); } }, error: function (data) { console.log("sendCaptcha ==> error: data = " + eval(data)); alert("網(wǎng)絡(luò)超時(shí)"); clearTimeout(t); b_code = true; var msg = "獲取驗(yàn)證碼"; $("#code").text(msg); c = 60; } }); }
第二步偽代碼:
@RequestMapping(value = "captcha/{recPhoneNum}", method = RequestMethod.POST) public Object getSmsCaptcha(ModelMap model, @PathVariable("recPhoneNum")String recPhoneNum) { String responseBody = null; /* 這里驗(yàn)證手機(jī)號是否被注冊 */ // 生成驗(yàn)證碼 String captcha = Generator.generateCaptcha(); // 第三方短信通信接口參數(shù)設(shè)置 req.setReceive(recPhoneNum); try { // 發(fā)送請求 responseBody = req.send(); // 將驗(yàn)證碼放入session model.addAttribute("captcha", captcha); // 得到結(jié)果 responseBody = rsp.getBody(); log.debug("getSmsCaptcha: responseBody = " + responseBody); if (rsp.getResult() != null) { model.addAttribute("success_response", rsp.getResult()); } else { model.addAttribute("error_response", rsp.getSubMsg()); } } catch (ApiException e) { log.error("getSmsCaptcha :" + e.getErrMsg()); } // 解析結(jié)果 if (successJson != null) { successJson = successJson.getJSONObject("result"); return successJson.getBoolean("success"); } else { return false; } }
最后一步偽代碼:
// 從session取出驗(yàn)證碼 String captcha = session.getAttribute("captcha"); // 比較 if (reqCaptcha.equals(captcha)) // 相同通過,則無效化驗(yàn)證碼 session.setAttribute("captcha", null); else // 不通過并提示無效驗(yàn)證碼
如有疑問,請指出!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的方法
- Java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼功能
- Android 用RxBinding與RxJava2實(shí)現(xiàn)短信驗(yàn)證碼倒計(jì)時(shí)功能
- Java使用云片API發(fā)送短信驗(yàn)證碼
- Java實(shí)現(xiàn)短信驗(yàn)證碼和國際短信群發(fā)功能的示例
- java基于正則提取字符串中的數(shù)字功能【如提取短信中的驗(yàn)證碼】
- JAVA實(shí)現(xiàn)利用第三方平臺發(fā)送短信驗(yàn)證碼
- java servlet手機(jī)app訪問接口(二)短信驗(yàn)證
- 基于JAVA的短信驗(yàn)證碼api調(diào)用代碼實(shí)例
相關(guān)文章
SpringBoot部署到Linux讀取resources下的文件及遇到的坑
本文主要給大家介紹SpringBoot部署到Linux讀取resources下的文件,在平時(shí)業(yè)務(wù)開發(fā)過程中,很多朋友在獲取到文件內(nèi)容亂碼或者文件讀取不到的問題,今天給大家分享小編遇到的坑及處理方案,感興趣的朋友跟隨小編一起看看吧2021-06-06Java集合中獲取數(shù)據(jù)前驅(qū)和后繼元素的實(shí)現(xiàn)
使用一致性hash時(shí),如何找到一個(gè)hash值對應(yīng)的臨近節(jié)點(diǎn),可以使用集合中獲取數(shù)據(jù)的前驅(qū)和后繼元素實(shí)現(xiàn),所以本文給大家介紹了Java集合中獲取數(shù)據(jù)前驅(qū)和后繼元素的實(shí)現(xiàn),文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2024-05-05mybatis報(bào)Query?was?Empty異常的問題
這篇文章主要介紹了mybatis報(bào)Query?was?Empty異常的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03解析Java的Spring框架的BeanPostProcessor發(fā)布處理器
這篇文章主要介紹了Java的Spring框架的BeanPostProcessor發(fā)布處理器,Spring是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12java web將數(shù)據(jù)導(dǎo)出為pdf格式文件代碼片段
這篇文章主要為大家詳細(xì)介紹了java web將數(shù)據(jù)導(dǎo)出為pdf格式文件代碼片段,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01