亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

為了防止有廣告嫌疑這里就不說短信平臺(tái)是哪個(gè)了。

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

首先將短信平臺(tái)接口代碼列出:這里要下載三個(gè)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","手機(jī)號(hào)碼"),new NameValuePair("smsText","驗(yàn)證碼: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","手機(jī)號(hào)碼"),new NameValuePair("smsText","驗(yàn)證碼:8888")};

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

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

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();//驗(yàn)證碼
NameValuePair[] data ={ new NameValuePair("Uid", "****"),new NameValuePair("Key", "******"),new NameValuePair("smsMob",phone),new NameValuePair("smsText","您正在注冊(cè)本站會(huì)員,本次驗(yàn)證碼為:"+code+""+"有效時(shí)間為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;
}
}

***表示的是在第三方平臺(tái)注冊(cè)的賬號(hào)密碼。

ACTION層:

/**
* @author hang 
* @Decription 注冊(cè),發(fā)送短信驗(yàn)證碼,保存到Session中
* @param 封裝客戶端請(qǐng)求 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ā)來的手機(jī)號(hào)
UserBean user = userService.getByPhone(phone);
if (user != null) {
message = "該手機(jī)號(hào)已被注冊(cè)";
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ā)送的驗(yàn)證碼內(nèi)容
logger.info("發(fā)送的驗(yàn)證碼:"+code); //打印日志
HttpSession session = request.getSession(); //設(shè)置session
session.setAttribute("code", code);  //將短信驗(yàn)證碼放到session中保存
session.setMaxInactiveInterval(60 * 5);//保存時(shí)間 暫時(shí)設(shè)定為5分鐘
return new Response(Status.SUCCESS, message);
} else {
message = "短信發(fā)送失敗";
return new Response(Status.ERROR, message);
}
}
}

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

測(cè)試:

利用POSTMAN在本地進(jìn)行測(cè)試:

結(jié)果:

到此發(fā)送成功。

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

相關(guān)文章

  • Feign超時(shí) 在yml文件里的配置方式

    Feign超時(shí) 在yml文件里的配置方式

    這篇文章主要介紹了Feign超時(shí) 在yml文件里的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • springboot整合activity自動(dòng)部署及部署文件命名流程

    springboot整合activity自動(dòng)部署及部署文件命名流程

    這篇文章主要介紹了springboot整合activity自動(dòng)部署及部署文件命名流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • springboot實(shí)現(xiàn)配置本地訪問端口及路徑

    springboot實(shí)現(xiàn)配置本地訪問端口及路徑

    這篇文章主要介紹了springboot實(shí)現(xiàn)配置本地訪問端口及路徑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java遠(yuǎn)程調(diào)用Shell腳本并獲取輸出信息【推薦】

    Java遠(yuǎn)程調(diào)用Shell腳本并獲取輸出信息【推薦】

    這篇文章主要介紹了Java遠(yuǎn)程調(diào)用Shell腳本并獲取輸出信息,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 使用IDEA創(chuàng)建一個(gè)vert.x項(xiàng)目的方法

    使用IDEA創(chuàng)建一個(gè)vert.x項(xiàng)目的方法

    這篇文章主要介紹了使用IDEA創(chuàng)建一個(gè)vert.x項(xiàng)目的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • Java執(zhí)行shell命令的實(shí)現(xiàn)

    Java執(zhí)行shell命令的實(shí)現(xiàn)

    本文主要介紹了Java執(zhí)行shell命令的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 一篇文章教會(huì)你使用java爬取想要的資源

    一篇文章教會(huì)你使用java爬取想要的資源

    這篇文章主要介紹了使用java爬蟲爬取想要的資源,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Nacos入門過程的坑--獲取不到配置的值問題

    Nacos入門過程的坑--獲取不到配置的值問題

    這篇文章主要介紹了Nacos入門過程的坑--獲取不到配置的值問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringCloud中的Feign服務(wù)間的調(diào)用詳解

    SpringCloud中的Feign服務(wù)間的調(diào)用詳解

    這篇文章主要介紹了SpringCloud中的Feign服務(wù)間的調(diào)用詳解,Feign 是一個(gè)聲明式的 REST 客戶端,它能讓 REST 調(diào)用更加簡(jiǎn)單,Feign 供了 HTTP 請(qǐng)求的模板,通過編寫簡(jiǎn)單的接口和插入注解,就可以定義好 HTTP 請(qǐng)求的參數(shù)、格式、地址等信息,需要的朋友可以參考下
    2024-01-01
  • Javabean簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Javabean簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Javabean簡(jiǎn)介,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07

最新評(píng)論