向邮箱发送验证码去验证邮箱或者密码等等

来源:互联网 发布:sql update 多个行 编辑:程序博客网 时间:2024/06/11 06:51

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秒验证时间、验证有没有发送成功为了安全或者其他的等等。如果项目安全性很高,需要再补充其他的东西。


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 汽车不小心陷进泥潭怎么办 招商银行信用卡激活电话换了怎么办 冲鼻子是耳朵进水了怎么办 不小心点了赞怎么办 小车间太热了怎么办 在车间上班好热怎么办 英雄杀四星李逵不拉仇恨怎么办 手表玻璃里面有雾水怎么办 dw手表玻璃碎了怎么办 手表玻璃面花了怎么办 有个窝囊的父母怎么办 苹果7p玩游戏卡怎么办 三星玩游戏很卡怎么办 三星打游戏很卡怎么办 香水喷到眼睛里怎么办 萍果平板锁机怎么办? 苹果6开机卡死怎么办 辐射4发夹用完了怎么办 辐射4多的武器怎么办 大姨妈恶心想吐怎么办 玩完游戏想吐怎么办 玩完了海盗船想吐怎么办 戴眼镜恶心想吐怎么办 玩电脑恶心想吐怎么办 玩游戏玩的头疼怎么办 玩游戏头疼想吐怎么办 游戏玩久了头疼怎么办 有3d眩晕症怎么办 玩游戏晕3d怎么办 梦幻西游亏的钱怎么办 普惠卡销户了钱存进去了怎么办 梦幻西游现金变储备了怎么办 孩子挣了钱存不下怎么办 电脑显示副本不是正版怎么办 斗战神师徒一个人删除角色怎么办 起业kx5防盗器不响怎么办 灌浆记录仪存盘满了怎么办 自首后发现无罪证据怎么办 中国劲酒过期了怎么办 玻尿酸流到眼皮怎么办 手指被胶带缠紫了怎么办