这两天尝试写了一个注册功能,一种是手机验证码注册,一种是邮箱注册激活。开始写的时候,不知道从哪着手,看了好几篇文章,开始慢慢了解思路,现在就记录下来。
思路:
注册之手机验证:一个注册页面【手机号框、验证码框、点击获取验证码按钮、点击注册按钮】。点击获取验证码后,后台controller层随机生成一个6位随机数(即验证码),把验证码通过某个短信API接口传到该手机上。手机信息看到验证码,就把它输入前台的验证码框,点注册提交,只要输入的验证码与后台生成的验证码是相同的,就可以提示注册成功了。
注册之邮箱激活:一个注册页面【用户名框、密码框、邮箱框、点击注册按钮】。一个数据库【用户表:id、username、password、state(激活码状态)、code(激活码)】。一个后台默认生成一个激活码(可以用UUID)和默认一个激活码状态(比如:“0”)。用户在点击注册后,将数据保存在数据库,保存成功后,新建一个线程去执行发送邮件的任务,通过邮箱发送一个带code(激活码)的链接给用户,用户点击链接后,后台接收到链接传过来的激活码,查询数据库是否存在该用户信息,有则执行修改激活码状态(比如“1”),然后提示注册成功。
代码之手机验证(测试):我是申请聚合数据的短信API接口来用的(参考其开发文档),其他也行吧,这里只测试发验证码给手机。
package com.fh.controller.system.SMS;
import net.sf.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import static com.fh.util.url.UrlUtil.net;
public class SmsVerification {
public static void main(String[] args) {
//这个这样写主要是开发文档里这样规定
String code ="#code#="+getCode();
String result =null;
String url ="http://v.juhe.cn/sms/send";//请求接口地址
Map params = new HashMap();//请求参数
params.put("mobile","*******");//接受短信的用户手机号码
params.put("tpl_id","*******");//您申请的短信模板ID,根据实际情况修改
params.put("tpl_value",code);//您设置的模板变量,根据实际情况修改
params.put("key","*****************");//应用APPKEY(应用详细页查询)
try {
result = net(url, params, "GET");
JSONObject object = JSONObject.fromObject(result);
if(object.getInt("error_code")==0){
System.out.println(object.get("result"));
}else{
System.out.println(object.get("error_code")+":"+object.get("reason"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
//获取随机验证码
public static String getCode(){
//开始生成随机数字 -- 验证码
StringBuffer buffer = new StringBuffer();
Random random = new Random(); //随机数字
for(int i =0;i<6 ;i++) {
//生成一个6位数的随机数
buffer.append(random.nextInt(10));//范围0到10,不包括10 ;0-9
}
return buffer.toString();
}
}