JavaWeb之短信發(fā)送驗(yàn)證碼

需要jar包
commons-codec-1.9.jar

目前手機(jī)注冊(cè)登錄是時(shí)下非常流行的一種交互方式旁壮,出售短信包的平臺(tái)以及對(duì)應(yīng)的API有很多,這里只以其中一個(gè)為例荣恐,秒嘀

image.png

Config.java

package test;

public class Config{
    public static final String BASE_URL = "https://api.miaodiyun.com/20150822";
    // 此參數(shù)在開(kāi)發(fā)者注冊(cè)后系統(tǒng)自動(dòng)生成啤贩,去對(duì)應(yīng)平臺(tái)登錄進(jìn)行查看
    public static final String ACCOUNT_SID = "91252829202f42ccb380369b886a481b";
    // 此參數(shù)在開(kāi)發(fā)者注冊(cè)后系統(tǒng)自動(dòng)生成,去對(duì)應(yīng)平臺(tái)登錄進(jìn)行查看
    public static final String AUTH_TOKEN = "424a8c02ba794b3aabad9eb00c3e4db7";

    public static final String RESP_DATA_TYPE = "json";
}

HttpUtil.java

package test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.codec.digest.DigestUtils;

public class HttpUtil
{
    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 "&timestamp=" + timestamp + "&sig=" + sig + "&respDataType=" + Config.RESP_DATA_TYPE;
    }

    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();

            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(20000);
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            out.write(body);
            out.flush();

            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 postHuiDiao(String url, String body)
    {
        String result = "";
        try
        {
            OutputStreamWriter out = null;
            BufferedReader in = null;
            URL realUrl = new URL(url);
            URLConnection conn = realUrl.openConnection();

            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(20000);

            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            out.write(body);
            out.flush();

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

IndustrySMS.java

package test;

import java.net.URLEncoder;

import test.Config;
import test.HttpUtil;

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

    private static String accountSid = Config.ACCOUNT_SID;
    // 要發(fā)送到的手機(jī)號(hào)碼
    private static String to = "13386895356";
    // 對(duì)應(yīng)模板信息嘹吨,驗(yàn)證碼可以選擇隨機(jī)生成
    private static String smsContent = "【xxxxx】您的信驗(yàn)證碼為123456,請(qǐng)?jiān)?分鐘內(nèi)使用";

    /**
     * 發(fā)送信息的方法
     */
    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);
    }
}

Test.java

package test;

public class Test{
    public static void main(String[] args){
        IndustrySMS.execute();
    }
}

驗(yàn)證思路

將手機(jī)驗(yàn)證碼存入session中境氢,利用ajax請(qǐng)求獲取發(fā)送的驗(yàn)證碼蟀拷,前臺(tái)頁(yè)面啟動(dòng)定時(shí)器,在60s內(nèi)可以與從后臺(tái)取得的驗(yàn)證碼進(jìn)行對(duì)比驗(yàn)證萍聊,超時(shí)后问芬,將獲取到的驗(yàn)證碼清空

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市寿桨,隨后出現(xiàn)的幾起案子此衅,更是在濱河造成了極大的恐慌,老刑警劉巖亭螟,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挡鞍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡预烙,警方通過(guò)查閱死者的電腦和手機(jī)墨微,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)扁掸,“玉大人欢嘿,你說(shuō)我怎么就攤上這事∫埠” “怎么了炼蹦?”我有些...
    開(kāi)封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)狸剃。 經(jīng)常有香客問(wèn)我掐隐,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任虑省,我火速辦了婚禮匿刮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘探颈。我一直安慰自己熟丸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布伪节。 她就那樣靜靜地躺著光羞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怀大。 梳的紋絲不亂的頭發(fā)上纱兑,一...
    開(kāi)封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音化借,去河邊找鬼潜慎。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蓖康,可吹牛的內(nèi)容都是我干的铐炫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蒜焊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼倒信!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起山涡,我...
    開(kāi)封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤堤结,失蹤者是張志新(化名)和其女友劉穎唆迁,沒(méi)想到半個(gè)月后鸭丛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唐责,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年鳞溉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鼠哥。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡熟菲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出朴恳,到底是詐尸還是另有隱情抄罕,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布于颖,位于F島的核電站呆贿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜做入,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一冒晰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竟块,春花似錦壶运、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至秫逝,卻和暖如春恕出,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背违帆。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工浙巫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刷后。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓的畴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親尝胆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丧裁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容