向邮箱发送验证码去验证邮箱或者密码等等
来源:互联网 发布:sql update 多个行 编辑:程序博客网 时间:2024/05/21 17:30
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中的格式是 前缀+keyString 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中的格式是 前缀+keyString codeSessionKey = SMS_CODE_PREFIX + key;session.setAttribute(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,一个验证码validCode
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;}注意:此时就拿发出的验证和用户输入的验证匹配相等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秒验证时间、验证有没有发送成功为了安全或者其他的等等。如果项目安全性很高,需要再补充其他的东西。
- 向邮箱发送验证码去验证邮箱或者密码等等
- 忘记密码发送验证码到邮箱
- php邮箱发送验证码
- QQ邮箱发送验证
- 邮箱/密码格式验证
- php 发送验证码到邮箱
- JAVA实现发送邮箱验证码
- PHP发送邮箱激活验证
- java动态发送邮箱验证
- spring java 发送邮箱验证
- PHP发送邮箱激活验证
- asp.net 邮箱验证 密码
- 忘记密码中的邮箱验证
- 邮箱发验证码
- 邮箱验证
- 邮箱验证
- 邮箱验证
- 验证邮箱
- 修改Tomcat服务器Server Locations
- 下拉菜单(css、jq)
- linux 哲学家进餐问题 奇数偶数号科学家
- Day15—List集合、Queue集合、Set集合
- 学习记录
- 向邮箱发送验证码去验证邮箱或者密码等等
- 平衡二叉树 之 AVL树
- CSS+ DIV布局
- 数据挖掘模型效果评估方法汇总
- Mycat系列—Mysql读写分离+强制走写节点+根据主从延时的读写分离
- 常见水平垂直居中问题
- MT6752/32平台 KK和L版本支持的虚拟sensor类型有哪些
- Rxjava2.0问题集
- 在非MFC环境中使用CString、使用_bstr_t