javaweb实现⼿机短信验证码登录实例
java web实现⼿机短信验证码登录实例
运⾏环境
jdk7+tomcat7
项⽬技术(必填)
Servlet+Ajax+Bootstrap
数据库⽂件
我这⾥没⽤到数据库,⽐较简单,如果需要⽤到数据库不会的话可以私信我或者加我QQ
jar包⽂件
jar包只有⼀个,在项⽬的lib⽂件夹下
运⾏截图
项⽬描述
这个⼩案例呢⼤家可以在项⽬中⼩⼩的装个逼,本⼈在校⽣,反正在项⽬答辩的时候,看⼤家的反应还不错,哈哈。
本次案例呢⼤家不仅可以在登录的时候使⽤,另外注册的时候也可以⽤,⼤家⾃⾏决定,反正我在注册的时候⽤了,这次的案例没给⼤家敲注册,就简单写了个登录给⼤家分享⼀下。没有使⽤任何框架,⽤了⼀个简单的Servlet,⾮常简单易懂,下载下来我的代码,只需要简单改⼏⾏代码就可以了,改成属于你⾃⼰的验证码就OK了!
1、你需要登录秒嘀科技(www.miaodiyun)这个官⽹去注册⼀个账号,这是我已经注册之后的是这个样⼦的,你需要做的就是,在开发者信息⾥⾯获得你⾃⼰的AUTH_TOK EN
2、需要在配置管理中新建⼀个模板,这个模板就是发送验证码的模板,给⼤家看⼀下我的模板
3、接着下载下来我的代码,导⼊开发⼯具之后,在java.aaa.util这个包中的GetMessageCode的类中,把我圈住的地⽅改成你⾃⼰的,我相信⼤家应该都能看懂,就不细说了,把我圈的地⽅改了就⾏了(ACCOUNT_SID和AUTH_TOKEN)最好就改这两个就好了;下⾯那个是要和你模板⾥⾯的对应的,上⾯说了,你需要⾃⼰新建⼀个模板,⽽我下⾯圈住那个就是和你模板⼀致,切记,⼀定要保持⼀致
4、⼀切准备就绪之后,部署项⽬,启动项⽬,登录地址是:
页⾯展⽰如下:
验证码提⽰错误页⾯:(我收到的验证码是919805,我输⼊的,是919804,就会提⽰错误,当然输⼊正确就跳转成功页⾯)
最后忘了跟⼤家说了,这个⽹站注册之后会赠送10元钱,⾜够⼤家学习使⽤了,所以不⽤担⼼需要充钱,放⼼⽤。
整理不易,刚开始摸索的时候遭遇各种BUG,⼀度想放弃,但是最终还是坚持下来了,同时也想着能够给⼤家分享⼀下,希望⼤家能够喜欢。
Java实现短信验证码--(阿⾥云完整教程)
2018-04-24 13:03:12 阅读数 22594更多
分类专栏:
版权声明:本⽂为博主原创⽂章,遵循版权协议,转载请附上原⽂出处链接和本声明。
本⽂链接:
我们在实现登录注册的时候,常常⽤到了短信验证码校验,下⾯给⼤家简单介绍阿⾥云的短信服务平台。
相关jar包:
aliyun-java-sdk-core-3.2.2.jar()
aliyun-java-sdk-dysmsapi-1.0.0-SANPSHOT.jar()
⽤Maven导⼊jar包:
1.    <dependency>
2.        <groupId>com.aliyun</groupId>
3.        <artifactId>aliyun-java-sdk-core</artifactId>
4.        <version>3.2.8</version> 注:如提⽰报错,先升级基础包版,⽆法解决可联系技术⽀持
5.    </dependency>
6.    <dependency>
7.        <groupId>com.aliyun</groupId>
8.        <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
9.        <version>1.1.0</version>
10.    </dependency>
2.创建AccessKey,(Access Key ID -- Access Key Secret)如图:
3.进⾏短信签名和短信模板设定,如图:
4.基本配置完成后,我们就需要写代码了
StaticParam.java (为了⽅便配置和明确易懂,我把配置参数放到这个类中)
1. package com.beishan.util;
2.
3. public class StaticPeram {web端登录
4.  /**
5.  * ⼿机验证部分配置
6.  */
7.  // 设置超时时间-可⾃⾏调整
8.  final static String defaultConnectTimeout  = "sun.client.defaultConnectTimeout";
9.  final static String defaultReadTimeout = "sun.client.defaultReadTimeout";
10.  final static String Timeout = "10000";
11.  // 初始化ascClient需要的⼏个参数
12.  final static String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,⽆需修改)
13.  final static String domain = "dysmsapi.aliyuncs";// 短信API产品域名(接⼝地址固定,⽆需修改)
14.  // 替换成你的AK (产品密)
15.  final static String accessKeyId = "accessKeyId";// 你的accessKeyId,填你⾃⼰的上⽂配置所得⾃⾏配置
16.  final static String accessKeySecret = "accessKeySecret";// 你的accessKeySecret,填你⾃⼰的上⽂配置所得⾃⾏配置
17.  // 必填:短信签名-可在短信控制台中到
18.  final static String SignName = "签名";    // 阿⾥云配置你⾃⼰的短信签名填⼊
19.  // 必填:短信模板-可在短信控制台中到
20.  final static String TemplateCode = "SMS_91945080"; // 阿⾥云配置你⾃⼰的短信模板填⼊
21.
22. }
PhoneCode.java(⼯具类,基本可以直接使⽤,⾥⾯加⼊了main⽅法,可以直接在main⽅法中设置你的⼿机号码进⾏测试)
1. package com.beishan.util;
2.
3. import com.aliyuncs.DefaultAcsClient;
4. import com.aliyuncs.IAcsClient;
5. import com.del.v20170525.SendSmsRequest;
6. import com.del.v20170525.SendSmsResponse;
7. import ptions.ClientException;
8. import ptions.ServerException;
9. import com.aliyuncs.http.MethodType;
10. import com.aliyuncs.profile.DefaultProfile;
11. import com.aliyuncs.profile.IClientProfile;
12.
13. public class PhoneCode {
14.
15.  private static String code ;
16.
17.  public static void main(String[] args) {
18.  String phone = "⼿机号码"; //此处可输⼊你的⼿机号码进⾏测试
19.  getPhonemsg(phone);
20.
21.  }
22.
23.  /**
24.  * 阿⾥云短信服务配置
25.  * @param mobile
26.  * @return
27.  */
28.  public static String getPhonemsg(String mobile) {
29.
30.  /**
31.    * 进⾏正则关系校验
32.    */
33.  System.out.println(mobile);
34.  if (mobile == null || mobile == "") {
35.    System.out.println("⼿机号为空");
36.    return "";
37.  }
38.  /**
39.    * 短信验证---阿⾥⼤于⼯具
40.    */
41.
42.  // 设置超时时间-可⾃⾏调整
43.  System.setProperty(StaticPeram.defaultConnectTimeout, StaticPeram.Timeout);
44.  System.setProperty(StaticPeram.defaultReadTimeout, StaticPeram.Timeout);
45.  // 初始化ascClient需要的⼏个参数
46.  final String product = StaticPeram.product;// 短信API产品名称(短信产品名固定,⽆需修改)
47.  final String domain = StaticPeram.domain;// 短信API产品域名(接⼝地址固定,⽆需修改)
48.  // 替换成你的AK
49.  final String accessKeyId = StaticPeram.accessKeyId;// 你的accessKeyId,参考本⽂档步骤2
50.  final String accessKeySecret = StaticPeram.accessKeySecret;// 你的accessKeySecret,参考本⽂档步骤2
51.  // 初始化ascClient,暂时不⽀持多region
52.  IClientProfile profile = Profile("cn-hangzhou",
53.    accessKeyId, accessKeySecret);
54.  try {
55.    DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product,
56.      domain);
57.  } catch (ClientException e1) {
58.    e1.printStackTrace();
59.  }
60.
61.  //获取验证码
62.  code = vcode();
63.
64.  IAcsClient acsClient = new DefaultAcsClient(profile);
65.  // 组装请求对象
66.  SendSmsRequest request = new SendSmsRequest();
67.  // 使⽤post提交
68.  request.setMethod(MethodType.POST);
69.  // 必填:待发送⼿机号。⽀持以逗号分隔的形式进⾏批量调⽤,批量上限为1000个⼿机号码,批量调⽤相对于单条调⽤及时性稍有延迟,验证码类型的短信推荐使⽤单条调⽤的⽅式
70.  request.setPhoneNumbers(mobile);
71.  // 必填:短信签名-可在短信控制台中到
72.  request.setSignName(StaticPeram.SignName);
73.  // 必填:短信模板-可在短信控制台中到
74.  request.setTemplateCode(StaticPeram.TemplateCode);
75.  // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
76.  // 友情提⽰:如果JSON中需要带换⾏符,请参照标准的JSON协议对换⾏符的要求,⽐如短信内容中包含\r\n的情况在JSON中需要表⽰成\\r\\n,否则会导致JSON在服务端解析失败
77.  request.setTemplateParam("{ \"number\":\""+code+"\"}");
78.  // 可选-上⾏短信扩展码(⽆特殊需求⽤户请忽略此字段)
79.  // request.setSmsUpExtendCode("90997");
80.  // 可选:outId为提供给业务⽅扩展字段,最终在短信回执消息中将此值带回给调⽤者
81.  request.setOutId("yourOutId");
82.  // 请求失败这⾥会抛ClientException异常
83.  SendSmsResponse sendSmsResponse;
84.  try {
85.    sendSmsResponse = AcsResponse(request);
86.    if (Code() != null
87.      && Code().equals("OK")) {
88.    // 请求成功
89.    System.out.println("获取验证码成功");
90.    } else {
91.                                //如果验证码出错,会输出错误码告诉你具体原因
92.                                System.out.Code());
93.                                System.out.println("获取验证码失败...");
94.    }
95.  } catch (ServerException e) {
96.    e.printStackTrace();
97.    return "由于系统维护,暂时⽆法注册";
98.  } catch (ClientException e) {
99.    e.printStackTrace();
100.    return "由于系统维护,暂时⽆法注册";
101.  }
102.  return "true";
103.  }
104.
105.  /**
106.  * ⽣成6位随机数验证码
107.  * @return
108.  */
109.  public static String vcode(){
110.  String vcode = "";
111.        for (int i = 0; i < 6; i++) {
112.            vcode = vcode + (int)(Math.random() * 9);
113.        }
114.        return vcode;
115.  }
116. }
注:如果获取验证码失败:Code() 会返回⼀个错误码告诉你失败的原因,如:返回isv.AMOUNT_NOT_ENOUGH 为:账户余额不⾜。希望⼤家都能成功实现。