<p id="m2nkj"><option id="m2nkj"><big id="m2nkj"></big></option></p>
    <strong id="m2nkj"></strong>
    <ruby id="m2nkj"></ruby>

    <var id="m2nkj"></var>
  • 短信驗證碼登錄的實現(xiàn)流程

    共 3864字,需瀏覽 8分鐘

     ·

    2020-09-13 11:54

    點擊上方藍色“程序猿DD”,選擇“設為星標”

    回復“資源”獲取獨家整理的學習資料!

    來源 |?blog.csdn.net/classabcd/java/article/details/82464582

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

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

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

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

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

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

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

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


    <dependency>
    ??<groupId>commons-codecgroupId>
    ??<artifactId>commons-codecartifactId>
    ??<version>1.11version>
    dependency>

    二、我這里只是編寫一個簡單的短信驗證功能,要是用其他的語音驗證。。。。等等需要去秒滴云官方下載文檔,下面是編寫的一個config文檔,專門存放一些參數(shù)

    三、編寫http請求工具類

    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;
    ???}


    ???/**
    ????*?回調(diào)測試工具方法
    ????*
    ????*?@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;
    ???}
    }

    四、生成四位數(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;
    }

    4、執(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);
    }




    往期推薦

    老司機給我們解讀 Spring Boot 最流行的 16 條忠告

    贈書:面向?qū)ο蟮膬纱竺运迹俳o你們解答一次

    SpringBoot整合Netty并使用Protobuf進行數(shù)據(jù)傳輸

    程序員接私活完整攻略+贈開源管理系統(tǒng)

    記一次由Redis分布式鎖造成的重大事故

    三種 MySQL 大表優(yōu)化方案


    掃一掃,關注我

    一起學習,一起進步

    瀏覽 32
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報
    評論
    圖片
    表情
    推薦
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報
    <p id="m2nkj"><option id="m2nkj"><big id="m2nkj"></big></option></p>
    <strong id="m2nkj"></strong>
    <ruby id="m2nkj"></ruby>

    <var id="m2nkj"></var>
  • 久黄色视频 | 超薄丝袜足交在线视频 | 亚洲免费在线观看 | 女人高潮视频免费观看网站 | 小早川玲子一区二区88AV | www.豆花视频无码 | 免费播放片色情A片 | 久夜草| 亚洲无码视频手机免费观看在线观看 | 久久免费视频观看 |