向邮箱发送验证码去验证邮箱或者密码等等
2017-12-06 18:03
453 查看
1.首先向邮箱发送一个验证码,其实向其他邮箱发送一份邮件比较简单,主要是要验证这个验证码
假设邮箱能收到验证
//重新发送激活邮件
Member member = UserConext.getCurrentMember();
if(member == null){
return JsonResultUtil.getErrorJson("请您先登录再重新发送激活邮件!");
}
member = memberManager.get(member.getMember_id());
if(member == null){
return JsonResultUtil.getErrorJson("用户不存在,请您先登录再重新发送激活邮件!");
}
if(member.getLast_send_email() != null && System.currentTimeMillis() / 1000 - member.getLast_send_email().intValue() < 5 * 60){
return JsonResultUtil.getErrorJson("对不起,五分钟之内只能重新发送一次激活邮件!");
}
Map<String, Object> sendResult = EmailUtil.sendMobileSms(key);
int stateCode = Integer.parseInt(sendResult.get("smsContent").toString());
EopSite site = EopSite.getInstance();
EmailModel emailModel = new EmailModel();
emailModel.getData().put("username", member.getUname());
emailModel.getData().put("sitename", site.getSitename());
emailModel.getData().put("logo", site.getLogofile());
emailModel.getData().put("stateCode", stateCode);
emailModel.setTitle(member.getUname()+"您好,"+site.getSitename()+"会员绑定邮箱!");
emailModel.setEmail(email);
emailModel.setTemplate("reg_email_template.html");//用户看到的模板
emailModel.setEmail_type("绑定邮箱");
mailMessageProducer.send(emailModel);
member.setLast_send_email(DateUtil.getDateline());
memberManager.edit(member);
return JsonResultUtil.getSuccessJson("邮件发送成功,请登录您的邮箱 " + member.getEmail() + " 进行查收!");
2.现在主要验证码怎么验证:
Map<String, Object> sendResult = EmailUtil.sendMobileSms(key);
int stateCode = Integer.parseInt(sendResult.get("smsContent").toString());
stateCode 是一个6位数的验证码 从EmailUtil类取到发送邮箱中
3.看看这个类EmailUtil怎么生成验证码的以及怎么验证的
/**
* 邮箱验证码
* @author
*
*
*/
public class EmailUtil {
//验证码session前缀
private static final String SMS_CODE_PREFIX = "";
public static Map<String, Object> sendMobileSms(String key) {
Map<String, Object> result = new HashMap<String, Object>();
try {
//随机生成的动态码
String dynamicCode = "" + (int)((Math.random() * 9 + 1) * 100000);
String smsContent = "" + dynamicCode;
HttpSession session = ThreadContextHolder.getSession();// session中的格式是 前缀+key
String codeSessionKey = SMS_CODE_PREFIX + key;
session.setAttribute(codeSessionKey, dynamicCode);
// System.out.println(smsContent);
result.put("smsContent", smsContent);
} catch(RuntimeException e) {
TestUtil.print(e);
}
return result;
}
public static boolean validSmsCode(String validCode, String key) {
//防止 空值
if (key == null || "".equals(key)) {
// 默认为登录
key = SmsTypeKeyEnum.LOGIN.toString();
}
// 如果验证码为空
if (validCode == null || "".equals(validCode)) {
return false;
}
String code = (String) ThreadContextHolder.getSession().getAttribute(SMS_CODE_PREFIX + key);
// 验证码为空
if (code == null) {
return false;
} else {
// 忽略大小写 判断 不正确
if (!code.equalsIgnoreCase(validCode)) {
return false;
}
}
//验证通过后 去除session信息
ThreadContextHolder.getSession().removeAttribute(SMS_CODE_PREFIX + key);
return true;
}
}
(1.)这个类中有两个方法,一个sendMobileSms 是获取一个6位数的随机数
注意:这个验证码存在session中
//验证码session前缀
private static final String SMS_CODE_PREFIX = "";
HttpSession session = ThreadContextHolder.getSession();// session中的格式是 前缀+key
String codeSessionKey = SMS_CODE_PREFIX + key;
session.setAt
4000
tribute(codeSessionKey, dynamicCode);
4.用户在拿到 6位数的验证码后提交验证
//验证手机校验码的key值不能为空
Member member = UserConext.getCurrentMember();
if(StringUtil.isEmpty(key)){
return JsonResultUtil.getErrorJson("出现错误,请重试!");
}
boolean result = EmailUtil.validSmsCode(validCode, key);
//如果手机校验码错误
if (!result) {
return JsonResultUtil.getErrorJson("验证码错误");
} else{
memberManager.setEmial(email,member.getMember_id());
return JsonResultUtil.getSuccessJson("邮箱绑定成功!");
}
5.验证用户输入的验证码和发到邮箱的验证码是否一致
继续调用 类 EmailUtil
boolean result = EmailUtil.validSmsCode(validCode, key);
两个参数一个key,一个验证码validCodepublic static boolean validSmsCode(String validCode, String key) {
//防止 空值
if (key == null || "".equals(key)) {
// 默认为登录
key = SmsTypeKeyEnum.LOGIN.toString();
}
// 如果验证码为空
if (validCode == null || "".equals(validCode)) {
return false;
}
String code = (String) ThreadContextHolder.getSession().getAttribute(SMS_CODE_PREFIX + key);
// 验证码为空
if (code == null) {
return false;
} else {
// 忽略大小写 判断 不正确
if (!code.equalsIgnoreCase(validCode)) {
return false;
}
}
//验证通过后 去除session信息
ThreadContextHolder.getSession().removeAttribute(SMS_CODE_PREFIX + key);
return true;
}注意:此时就拿发出的验证和用户输入的验证匹配相等return true
从session取值
String code = (String) ThreadContextHolder.getSession().getAttribute(SMS_CODE_PREFIX + key);
// 验证码为空
if (code == null) {
return false;
} else {
// 忽略大小写 判断 不正确
if (!code.equalsIgnoreCase(validCode)) {
return false;
}
}
//验证通过后 去除session信息
ThreadContextHolder.getSession().removeAttribute(SMS_CODE_PREFIX + key);
return true;
ps.这里会有问题 超时没做判断 比如60秒验证时间、验证有没有发送成功为了安全或者其他的等等。如果项目安全性很高,需要再补充其他的东西。
假设邮箱能收到验证
//重新发送激活邮件
Member member = UserConext.getCurrentMember();
if(member == null){
return JsonResultUtil.getErrorJson("请您先登录再重新发送激活邮件!");
}
member = memberManager.get(member.getMember_id());
if(member == null){
return JsonResultUtil.getErrorJson("用户不存在,请您先登录再重新发送激活邮件!");
}
if(member.getLast_send_email() != null && System.currentTimeMillis() / 1000 - member.getLast_send_email().intValue() < 5 * 60){
return JsonResultUtil.getErrorJson("对不起,五分钟之内只能重新发送一次激活邮件!");
}
Map<String, Object> sendResult = EmailUtil.sendMobileSms(key);
int stateCode = Integer.parseInt(sendResult.get("smsContent").toString());
EopSite site = EopSite.getInstance();
EmailModel emailModel = new EmailModel();
emailModel.getData().put("username", member.getUname());
emailModel.getData().put("sitename", site.getSitename());
emailModel.getData().put("logo", site.getLogofile());
emailModel.getData().put("stateCode", stateCode);
emailModel.setTitle(member.getUname()+"您好,"+site.getSitename()+"会员绑定邮箱!");
emailModel.setEmail(email);
emailModel.setTemplate("reg_email_template.html");//用户看到的模板
emailModel.setEmail_type("绑定邮箱");
mailMessageProducer.send(emailModel);
member.setLast_send_email(DateUtil.getDateline());
memberManager.edit(member);
return JsonResultUtil.getSuccessJson("邮件发送成功,请登录您的邮箱 " + member.getEmail() + " 进行查收!");
2.现在主要验证码怎么验证:
Map<String, Object> sendResult = EmailUtil.sendMobileSms(key);
int stateCode = Integer.parseInt(sendResult.get("smsContent").toString());
stateCode 是一个6位数的验证码 从EmailUtil类取到发送邮箱中
3.看看这个类EmailUtil怎么生成验证码的以及怎么验证的
/**
* 邮箱验证码
* @author
*
*
*/
public class EmailUtil {
//验证码session前缀
private static final String SMS_CODE_PREFIX = "";
public static Map<String, Object> sendMobileSms(String key) {
Map<String, Object> result = new HashMap<String, Object>();
try {
//随机生成的动态码
String dynamicCode = "" + (int)((Math.random() * 9 + 1) * 100000);
String smsContent = "" + dynamicCode;
HttpSession session = ThreadContextHolder.getSession();// session中的格式是 前缀+key
String codeSessionKey = SMS_CODE_PREFIX + key;
session.setAttribute(codeSessionKey, dynamicCode);
// System.out.println(smsContent);
result.put("smsContent", smsContent);
} catch(RuntimeException e) {
TestUtil.print(e);
}
return result;
}
public static boolean validSmsCode(String validCode, String key) {
//防止 空值
if (key == null || "".equals(key)) {
// 默认为登录
key = SmsTypeKeyEnum.LOGIN.toString();
}
// 如果验证码为空
if (validCode == null || "".equals(validCode)) {
return false;
}
String code = (String) ThreadContextHolder.getSession().getAttribute(SMS_CODE_PREFIX + key);
// 验证码为空
if (code == null) {
return false;
} else {
// 忽略大小写 判断 不正确
if (!code.equalsIgnoreCase(validCode)) {
return false;
}
}
//验证通过后 去除session信息
ThreadContextHolder.getSession().removeAttribute(SMS_CODE_PREFIX + key);
return true;
}
}
(1.)这个类中有两个方法,一个sendMobileSms 是获取一个6位数的随机数
注意:这个验证码存在session中
//验证码session前缀
private static final String SMS_CODE_PREFIX = "";
HttpSession session = ThreadContextHolder.getSession();// session中的格式是 前缀+key
String codeSessionKey = SMS_CODE_PREFIX + key;
session.setAt
4000
tribute(codeSessionKey, dynamicCode);
4.用户在拿到 6位数的验证码后提交验证
//验证手机校验码的key值不能为空
Member member = UserConext.getCurrentMember();
if(StringUtil.isEmpty(key)){
return JsonResultUtil.getErrorJson("出现错误,请重试!");
}
boolean result = EmailUtil.validSmsCode(validCode, key);
//如果手机校验码错误
if (!result) {
return JsonResultUtil.getErrorJson("验证码错误");
} else{
memberManager.setEmial(email,member.getMember_id());
return JsonResultUtil.getSuccessJson("邮箱绑定成功!");
}
5.验证用户输入的验证码和发到邮箱的验证码是否一致
继续调用 类 EmailUtil
boolean result = EmailUtil.validSmsCode(validCode, key);
两个参数一个key,一个验证码validCodepublic static boolean validSmsCode(String validCode, String key) {
//防止 空值
if (key == null || "".equals(key)) {
// 默认为登录
key = SmsTypeKeyEnum.LOGIN.toString();
}
// 如果验证码为空
if (validCode == null || "".equals(validCode)) {
return false;
}
String code = (String) ThreadContextHolder.getSession().getAttribute(SMS_CODE_PREFIX + key);
// 验证码为空
if (code == null) {
return false;
} else {
// 忽略大小写 判断 不正确
if (!code.equalsIgnoreCase(validCode)) {
return false;
}
}
//验证通过后 去除session信息
ThreadContextHolder.getSession().removeAttribute(SMS_CODE_PREFIX + key);
return true;
}注意:此时就拿发出的验证和用户输入的验证匹配相等return true
从session取值
String code = (String) ThreadContextHolder.getSession().getAttribute(SMS_CODE_PREFIX + key);
// 验证码为空
if (code == null) {
return false;
} else {
// 忽略大小写 判断 不正确
if (!code.equalsIgnoreCase(validCode)) {
return false;
}
}
//验证通过后 去除session信息
ThreadContextHolder.getSession().removeAttribute(SMS_CODE_PREFIX + key);
return true;
ps.这里会有问题 超时没做判断 比如60秒验证时间、验证有没有发送成功为了安全或者其他的等等。如果项目安全性很高,需要再补充其他的东西。
相关文章推荐
- 验证用户名,手机号,ip地址,邮箱,url,密码,汉字等等的工具类
- tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片
- vue中手机号,邮箱正则验证以及60s发送验证码
- vue中手机号,邮箱正则验证以及60s发送验证码的实例
- jQuery 找回密码三步验证邮箱正则表达式 验证手机 获取验证码倒计时 php版
- 网站登录时密码忘记,通过向邮箱发送验证链接实现重置密码的实现方法
- 忘记密码发送验证码到邮箱
- mantis不需要邮箱验证,创建使用密码登录
- JavaScript:使用js实现发送邮箱验证码,按钮倒计时
- Android中注册、找回密码等发送验证码倒计时
- iOS开发中邮箱,电话号码,身份证,密码,昵称正则表达式验证
- 软件项目或者产品有时候会用到本机网卡的物理MAC地址、IP地址、硬盘序列号加上使用软体名称和地址进行安全加密验证,例如结合MAC地址进行登录验证等等,当然这种项目一般在局域网内运行,能相对提高系统的安全性
- jQuery 实现 点击按钮后倒计时效果,多用于实现发送手机验证码、邮箱验证码
- jquery 实现 点击按钮后倒计时效果,多用于实现发送手机验证码、邮箱验证码
- java调接口实现发送手机短信验证码功能,手机验证码,接口调用
- 使用js和正则表达式验证邮箱、手机号码、密码等
- Asp.net2005不用Ajax实现无刷新验证用户名、密码和中文验证码
- Asp.net2005不用Ajax实现无刷新验证用户名、密码和中文验证码
- 随机验证码的生成(手机或者邮箱验证码)
- python django 中利用QQ邮箱进行邮件发送,可用于邮箱注册、忘记密码