最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA實現(xiàn)利用第三方平臺發(fā)送短信驗證碼

 更新時間:2016年12月21日 09:06:53   作者:小珂椰子皮  
本文以注冊為例,在SpringMVC+Spring+Mybatis框架的基礎(chǔ)上完成該短信驗證碼功能。需要的朋友一起來看下吧

前段時間自己做的一個小項目中,涉及到用短信驗證碼登錄、注冊的問題,之前沒涉及過這一塊,看了別人的博客其實也是似懂非懂的,現(xiàn)在就將自己做的利用第三方短信平臺來發(fā)送驗證碼這個功能記下來。

本文以注冊為例,在SpringMVC+Spring+Mybatis框架的基礎(chǔ)上完成該短信驗證碼功能。

發(fā)送短信驗證碼的原理是:隨機生成一個6位數(shù)字,將該6位數(shù)字保存到session當中,客戶端通過sessionid判斷對應(yīng)的session,用戶輸入的驗證碼再與session記錄的驗證碼進行比較。

為了防止有廣告嫌疑這里就不說短信平臺是哪個了。

一般的第三方短信平臺都會有他們自己的短信接口,只要讀懂他們的接口稍作稍作改變就能滿足自己的需求。

首先將短信平臺接口代碼列出:這里要下載三個jar包commons-logging-1.1.1.jarcommons-httpclient-3.1.jarcommons-codec-1.4.jar

import java.io.UnsupportedEncodingException;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
public class SendMsg_webchinese {
public static void main(String[] args)throws Exception
{
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn"); //該第三方短信服務(wù)地址
post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//在頭文件中設(shè)置轉(zhuǎn)碼
NameValuePair[] data ={ new NameValuePair("Uid", "本站用戶名"),new NameValuePair("Key", "接口安全秘鑰"),new NameValuePair("smsMob","手機號碼"),new NameValuePair("smsText","驗證碼:8888")};
post.setRequestBody(data);
client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int statusCode = post.getStatusCode();
System.out.println("statusCode:"+statusCode);
for(Header h : headers)
{
System.out.println(h.toString());
}
String result = new String(post.getResponseBodyAsString().getBytes("gbk")); 
System.out.println(result); //打印返回消息狀態(tài)
post.releaseConnection();
}
}

不難看出,我們想要發(fā)送的信息是在這行代碼里面:NameValuePair[] data ={ new NameValuePair("Uid", "本站用戶名"),new NameValuePair("Key", "接口安全秘鑰"),new NameValuePair("smsMob","手機號碼"),new NameValuePair("smsText","驗證碼:8888")};

該接口中還有一個result信息,它的作用是告訴用戶短信發(fā)送的狀態(tài),1表示發(fā)送成功,其他的小于0的為失敗,這里只要知道1是成功即可。

我們實際的操作中,驗證碼肯定是要我們自己生成的。將result信息與驗證碼一起得到,于是很容易想到用一個HashMap集合。下面是以項目自己的需求對接口的更改:

import java.util.HashMap;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import com.yuetile.utils.VerifyingCodeGenerator;
public class SendMsg_webchineseController {
public static HashMap<String,String> getMessageStatus(String phone)throws Exception{
HashMap<String,String> m=new HashMap<String,String>();
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn"); 
post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//在頭文件中設(shè)置轉(zhuǎn)碼
String code=VerifyingCodeGenerator.generate();//驗證碼
NameValuePair[] data ={ new NameValuePair("Uid", "****"),new NameValuePair("Key", "******"),new NameValuePair("smsMob",phone),new NameValuePair("smsText","您正在注冊本站會員,本次驗證碼為:"+code+""+"有效時間為5分鐘")};
m.put("code", code);
post.setRequestBody(data);
client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int statusCode = post.getStatusCode();
System.out.println("statusCode:"+statusCode);
for(Header h : headers)
{
System.out.println(h.toString());
}
String result = new String(post.getResponseBodyAsString().getBytes("gbk")); 
System.out.println(result); //打印返回消息狀態(tài)
m.put("result", result);
post.releaseConnection();
return m;
}
}

***表示的是在第三方平臺注冊的賬號密碼。

ACTION層:

/**
* @author hang 
* @Decription 注冊,發(fā)送短信驗證碼,保存到Session中
* @param 封裝客戶端請求 POST 
* @return 返回狀態(tài)參數(shù)
* @throws Exception
*/
@ResponseBody
@RequestMapping(value = UrlDefine.Register.CHECKMESSAGEWORK, method = RequestMethod.POST)
public Object SendCheckMessage(HttpServletRequest request, @RequestBody UserBean u)
throws Exception {
String message = "發(fā)送成功";
String phone=u.getTelephone(); //獲取到客戶端發(fā)來的手機號
UserBean user = userService.getByPhone(phone);
if (user != null) {
message = "該手機號已被注冊";
return new Response(Status.ERROR, message);
} else {
HashMap<String, String> m = SendMsg_webchineseController.getMessageStatus(phone); //應(yīng)用發(fā)送短信接口
String result = m.get("result");  //獲取到result值
if (result.trim().equals("1")) {  //如果為1,表示成功發(fā)送
String code = m.get("code");  //獲取發(fā)送的驗證碼內(nèi)容
logger.info("發(fā)送的驗證碼:"+code); //打印日志
HttpSession session = request.getSession(); //設(shè)置session
session.setAttribute("code", code);  //將短信驗證碼放到session中保存
session.setMaxInactiveInterval(60 * 5);//保存時間 暫時設(shè)定為5分鐘
return new Response(Status.SUCCESS, message);
} else {
message = "短信發(fā)送失敗";
return new Response(Status.ERROR, message);
}
}
}

這樣就能發(fā)送成功了。

測試:

利用POSTMAN在本地進行測試:

結(jié)果:

到此發(fā)送成功。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Java中如何實現(xiàn)文件的讀寫操作

    關(guān)于Java中如何實現(xiàn)文件的讀寫操作

    在Java中,可以使用File和FileInputStream、FileOutputStream、BufferedReader、PrintWriter等類來進行文件讀寫操作,需要的朋友可以參考下
    2023-05-05
  • 使用spring mail發(fā)送html郵件的示例代碼

    使用spring mail發(fā)送html郵件的示例代碼

    本篇文章主要介紹了使用spring mail發(fā)送html郵件的示例代碼,這里整理了詳細的示例代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-09-09
  • Java實現(xiàn)Word轉(zhuǎn)PDF的全過程

    Java實現(xiàn)Word轉(zhuǎn)PDF的全過程

    在IT領(lǐng)域,文檔格式轉(zhuǎn)換是常見的任務(wù)之一,特別是在管理大量文本數(shù)據(jù)時,本文將詳細探討如何利用Java技術(shù)將Word文檔(.docx)轉(zhuǎn)換成PDF格式,需要的朋友可以參考下
    2025-04-04
  • SpringBoot?Knife4j框架&Knife4j的顯示內(nèi)容的配置方式

    SpringBoot?Knife4j框架&Knife4j的顯示內(nèi)容的配置方式

    Knife4j框架是基于Swagger2開發(fā)的在線API文檔生成工具,主要功能包括自動生成API文檔、接口文檔展示、接口測試工具、接口權(quán)限控制和在線調(diào)試,該框架支持通過注解自動生成詳細的接口文檔,開發(fā)者可以直接在文檔界面進行接口測試和調(diào)試
    2024-09-09
  • 理解maven命令package、install、deploy的聯(lián)系與區(qū)別

    理解maven命令package、install、deploy的聯(lián)系與區(qū)別

    這篇文章主要介紹了理解maven命令package、install、deploy的聯(lián)系與區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Spring?Boot如何實現(xiàn)統(tǒng)一數(shù)據(jù)返回

    Spring?Boot如何實現(xiàn)統(tǒng)一數(shù)據(jù)返回

    這篇文章主要介紹了Spring?Boot如何實現(xiàn)統(tǒng)一數(shù)據(jù)返回,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Java線程創(chuàng)建的四種方式總結(jié)

    Java線程創(chuàng)建的四種方式總結(jié)

    這篇文章主要介紹了Java線程創(chuàng)建的四種方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Java Map 按照Value排序的實現(xiàn)方法

    Java Map 按照Value排序的實現(xiàn)方法

    Map是鍵值對的集合接口,它的實現(xiàn)類主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。這篇文章主要介紹了Java Map 按照Value排序的實現(xiàn)方法,需要的朋友可以參考下
    2016-08-08
  • Java多線程中的CyclicBarrier使用方法詳解

    Java多線程中的CyclicBarrier使用方法詳解

    這篇文章主要介紹了Java多線程中的CyclicBarrier使用方法詳解,CyclicBarrier是一種同步輔助工具,它允許一組線程都等待對方到達公共障礙點,在涉及固定大小的線程的程序中,CyclicBarriers非常有用,這些線程間必須相互等待,需要的朋友可以參考下
    2023-12-12
  • Java實現(xiàn)的時間戳與date對象相互轉(zhuǎn)換功能示例

    Java實現(xiàn)的時間戳與date對象相互轉(zhuǎn)換功能示例

    這篇文章主要介紹了Java實現(xiàn)的時間戳與date對象相互轉(zhuǎn)換功能,結(jié)合具體實例形式分析了java日期與時間戳類型的表示與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06

最新評論

东城区| 岑巩县| 阳谷县| 兴隆县| 新余市| 当阳市| 随州市| 横山县| 平利县| 荥经县| 孟州市| 澄迈县| 离岛区| 岑巩县| 新津县| 博白县| 平阳县| 台中县| 祁阳县| 东宁县| 赫章县| 郴州市| 繁昌县| 木里| 博罗县| 湖南省| 沁源县| 阜阳市| 凤山市| 横峰县| 新昌县| 兴义市| 华阴市| 荃湾区| 翁牛特旗| 龙门县| 楚雄市| 大庆市| 横峰县| 东乡县| 罗平县|