java web實現手機短信驗證碼登錄實例
運行環境
jdk7+tomcat7
項目技術(必填)
Servlet+Ajax+Bootstrap
數據庫文件
我這里沒用到數據庫,比較簡單,如果需要用到數據庫不會的話可以私信我或者加我QQ
jar包文件
jar包只有一個,在項目的lib文件夾下
運行截圖
項目描述
這個小案例呢大家可以在項目中小小的裝個逼,本人在校生,反正在項目答辯的時候,看大家的反應還不錯,哈哈。
本次案例呢大家不僅可以在登錄的時候使用,另外注冊的時候也可以用,大家自行決定,反正我在注冊的時候用了,這次的案例沒給大家敲注冊,就簡單寫了個登錄給大家分享一下。沒有使用任何框架,用了一個簡單的Servlet,非常簡單易懂,下載下來我的代碼,只需要簡單改幾行代碼就可以了,改成屬於你自己的驗證碼就OK了!
1、你需要登錄秒嘀科技(www.miaodiyun.com)這個官網去注冊一個賬號,這是我已經注冊之后的是這個樣子的,你需要做的就是,在開發者信息里面獲得你自己的AUTH_TOKEN
2、需要在配置管理中新建一個模板,這個模板就是發送驗證碼的模板,給大家看一下我的模板
3、接着下載下來我的代碼,導入開發工具之后,在java.aaa.util這個包中的GetMessageCode的類中,把我圈住的地方改成你自己的,我相信大家應該都能看懂,就不細說了, 把我圈的地方改了就行了(ACCOUNT_SID和AUTH_TOKEN)最好就改這兩個就好了;下面那個是要和你模板里面的對應的,上面說了,你需要自己新建一個模板,而我下面圈住那個就是和你模板一致,切記,一定要保持一致
4、一切准備就緒之后,部署項目,啟動項目,登錄地址是:
頁面展示如下:
驗證碼提示錯誤頁面:(我收到的驗證碼是919805,我輸入的,是919804,就會提示錯誤,當然輸入正確就跳轉成功頁面)
最后忘了跟大家說了,這個網站注冊之后會贈送10元錢,足夠大家學習使用了,所以不用擔心需要充錢,放心用。
整理不易,剛開始摸索的時候遭遇各種BUG,一度想放棄,但是最終還是堅持下來了,同時也想着能夠給大家分享一下,希望大家能夠喜歡。
Java實現短信驗證碼--(阿里雲完整教程)
我們在實現登錄注冊的時候,常常用到了短信驗證碼校驗,下面給大家簡單介紹阿里雲的短信服務平台。
相關jar包:
aliyun-java-sdk-core-3.2.2.jar(點此下載)
aliyun-java-sdk-dysmsapi-1.0.0-SANPSHOT.jar(點此下載)
用Maven導入jar包:
-
<dependency>
-
<groupId>com.aliyun
</groupId>
-
<artifactId>aliyun-java-sdk-core
</artifactId>
-
<version>3.2.8
</version> 注:如提示報錯,先升級基礎包版,無法解決可聯系技術支持
-
</dependency>
-
<dependency>
-
<groupId>com.aliyun
</groupId>
-
<artifactId>aliyun-java-sdk-dysmsapi
</artifactId>
-
<version>1.1.0
</version>
-
</dependency>
1、登錄阿里雲官網(https://www.aliyun.com/),進入之后打開控制台,左上角點擊產品與服務,然后選擇短信服務,如圖:
2.創建AccessKey,(Access Key ID -- Access Key Secret)如圖:
3.進行 短信簽名 和 短信模板 設定,如圖:
4.基本配置完成后,我們就需要寫代碼了
StaticParam.java (為了方便配置和明確易懂,我把配置參數放到這個類中)
-
package com.beishan.util;
-
-
public
class StaticPeram {
-
/**
-
* 手機驗證部分配置
-
*/
-
// 設置超時時間-可自行調整
-
final
static String defaultConnectTimeout =
"sun.net.client.defaultConnectTimeout";
-
final
static String defaultReadTimeout =
"sun.net.client.defaultReadTimeout";
-
final
static String Timeout =
"10000";
-
// 初始化ascClient需要的幾個參數
-
final
static String product =
"Dysmsapi";
// 短信API產品名稱(短信產品名固定,無需修改)
-
final
static String domain =
"dysmsapi.aliyuncs.com";
// 短信API產品域名(接口地址固定,無需修改)
-
// 替換成你的AK (產品密)
-
final
static String accessKeyId =
"accessKeyId";
// 你的accessKeyId,填你自己的 上文配置所得 自行配置
-
final
static String accessKeySecret =
"accessKeySecret";
// 你的accessKeySecret,填你自己的 上文配置所得 自行配置
-
// 必填:短信簽名-可在短信控制台中找到
-
final
static String SignName =
"簽名";
// 阿里雲配置你自己的短信簽名填入
-
// 必填:短信模板-可在短信控制台中找到
-
final
static String TemplateCode =
"SMS_91945080";
// 阿里雲配置你自己的短信模板填入
-
-
}
PhoneCode.java(工具類,基本可以直接使用,里面加入了main方法,可以直接在main方法中設置你的手機號碼進行測試)
-
package com.beishan.util;
-
-
import com.aliyuncs.DefaultAcsClient;
-
import com.aliyuncs.IAcsClient;
-
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
-
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
-
import com.aliyuncs.exceptions.ClientException;
-
import com.aliyuncs.exceptions.ServerException;
-
import com.aliyuncs.http.MethodType;
-
import com.aliyuncs.profile.DefaultProfile;
-
import com.aliyuncs.profile.IClientProfile;
-
-
public
class PhoneCode {
-
-
private
static String code ;
-
-
public static void main(String[] args) {
-
String phone =
"手機號碼";
//此處可輸入你的手機號碼進行測試
-
getPhonemsg(phone);
-
-
}
-
-
/**
-
* 阿里雲短信服務配置
-
* @param mobile
-
* @return
-
*/
-
public static String getPhonemsg(String mobile) {
-
-
/**
-
* 進行正則關系校驗
-
*/
-
System.out.println(mobile);
-
if (mobile ==
null || mobile ==
"") {
-
System.out.println(
"手機號為空");
-
return
"";
-
}
-
/**
-
* 短信驗證---阿里大於工具
-
*/
-
-
// 設置超時時間-可自行調整
-
System.setProperty(StaticPeram.defaultConnectTimeout, StaticPeram.Timeout);
-
System.setProperty(StaticPeram.defaultReadTimeout, StaticPeram.Timeout);
-
// 初始化ascClient需要的幾個參數
-
final String product = StaticPeram.product;
// 短信API產品名稱(短信產品名固定,無需修改)
-
final String domain = StaticPeram.domain;
// 短信API產品域名(接口地址固定,無需修改)
-
// 替換成你的AK
-
final String accessKeyId = StaticPeram.accessKeyId;
// 你的accessKeyId,參考本文檔步驟2
-
final String accessKeySecret = StaticPeram.accessKeySecret;
// 你的accessKeySecret,參考本文檔步驟2
-
// 初始化ascClient,暫時不支持多region
-
IClientProfile profile = DefaultProfile.getProfile(
"cn-hangzhou",
-
accessKeyId, accessKeySecret);
-
try {
-
DefaultProfile.addEndpoint(
"cn-hangzhou",
"cn-hangzhou", product,
-
domain);
-
}
catch (ClientException e1) {
-
e1.printStackTrace();
-
}
-
-
//獲取驗證碼
-
code = vcode();
-
-
IAcsClient acsClient =
new DefaultAcsClient(profile);
-
// 組裝請求對象
-
SendSmsRequest request =
new SendSmsRequest();
-
// 使用post提交
-
request.setMethod(MethodType.POST);
-
// 必填:待發送手機號。支持以逗號分隔的形式進行批量調用,批量上限為1000個手機號碼,批量調用相對於單條調用及時性稍有延遲,驗證碼類型的短信推薦使用單條調用的方式
-
request.setPhoneNumbers(mobile);
-
// 必填:短信簽名-可在短信控制台中找到
-
request.setSignName(StaticPeram.SignName);
-
// 必填:短信模板-可在短信控制台中找到
-
request.setTemplateCode(StaticPeram.TemplateCode);
-
// 可選:模板中的變量替換JSON串,如模板內容為"親愛的${name},您的驗證碼為${code}"時,此處的值為
-
// 友情提示:如果JSON中需要帶換行符,請參照標准的JSON協議對換行符的要求,比如短信內容中包含\r\n的情況在JSON中需要表示成\\r\\n,否則會導致JSON在服務端解析失敗
-
request.setTemplateParam(
"{ \"number\":\""+code+
"\"}");
-
// 可選-上行短信擴展碼(無特殊需求用戶請忽略此字段)
-
// request.setSmsUpExtendCode("90997");
-
// 可選:outId為提供給業務方擴展字段,最終在短信回執消息中將此值帶回給調用者
-
request.setOutId(
"yourOutId");
-
// 請求失敗這里會拋ClientException異常
-
SendSmsResponse sendSmsResponse;
-
try {
-
sendSmsResponse = acsClient.getAcsResponse(request);
-
if (sendSmsResponse.getCode() !=
null
-
&& sendSmsResponse.getCode().equals(
"OK")) {
-
// 請求成功
-
System.out.println(
"獲取驗證碼成功!!!");
-
}
else {
-
//如果驗證碼出錯,會輸出錯誤碼告訴你具體原因
-
System.out.println(sendSmsResponse.getCode());
-
System.out.println(
"獲取驗證碼失敗...");
-
}
-
}
catch (ServerException e) {
-
e.printStackTrace();
-
return
"由於系統維護,暫時無法注冊!!!";
-
}
catch (ClientException e) {
-
e.printStackTrace();
-
return
"由於系統維護,暫時無法注冊!!!";
-
}
-
return
"true";
-
}
-
-
/**
-
* 生成6位隨機數驗證碼
-
* @return
-
*/
-
public static String vcode(){
-
String vcode =
"";
-
for (
int i =
0; i <
6; i++) {
-
vcode = vcode + (
int)(Math.random() *
9);
-
}
-
return vcode;
-
}
-
}
注:如果獲取驗證碼失敗:sendSmsResponse.getCode() 會返回一個錯誤碼告訴你失敗的原因,如:返回isv.AMOUNT_NOT_ENOUGH 為:賬戶余額不足。希望大家都能成功實現。