博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java发送邮箱验证码、session校验功能
阅读量:6591 次
发布时间:2019-06-24

本文共 7895 字,大约阅读时间需要 26 分钟。

本篇主要描述“发送邮箱验证码、session校验”相关前(htmljs)后(java)台代码,业务逻辑示例,闲话少诉,直接上代码。

1、引入的jar包是mail-1.4.jar

2、java底层发送邮箱方法

public boolean sendEMail(Map
map) { log.info("電子郵件接口執行開始!"); String from = Cache.getInstance().getParamsConstant.EMAIL_FROM); String pwd = Cache.getInstance().getParams(Constant.EMAIL_PWD); String to = String.valueOf(map.get("mail")); String subject = String.valueOf(map.get("subject")); String content = String.valueOf(map.get("content")); String smtpHost = Cache.getInstance().getParams(Constant.EMAIL_SMTPHOST); if(StringUtils.isBlank(to) || StringUtils.isBlank(subject) || StringUtils.isBlank(content)){ log.info("郵件地址("+to+")、主題("+subject+")、內容("+content+")有為空項,不符合發送條件"); return false; } try{ Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求) props.setProperty("mail.smtp.host", smtpHost); // 发件人的邮箱的 SMTP服务器地址 props.setProperty("mail.smtp.auth", "true"); // 请求认证,参数名称与具体实现有关 // 创建Session实例对象 Session session = Session.getDefaultInstance(props); // 创建MimeMessage实例对象 MimeMessage message = new MimeMessage(session); // 设置发件人 message.setFrom(new InternetAddress(from)); // 设置收件人 message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); // 设置发送日期 message.setSentDate(new Date()); // 设置邮件主题 message.setSubject(subject); // 设置纯文本内容的邮件正文 message.setText(content); // 保存并生成最终的邮件内容 message.saveChanges(); // 设置为debug模式, 可以查看详细的发送 log session.setDebug(true); // 获取Transport对象 Transport transport = session.getTransport("smtp"); // 第2个参数需要填写的是QQ邮箱的SMTP的授权码,什么是授权码,它又是如何设置? transport.connect(from, pwd); // 发送,message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人 transport.sendMessage(message, message.getAllRecipients()); transport.close(); }catch(Exception e){ log.error(e.getMessage(), e); return false; } log.info("電子郵件接口執行完成,執行成功!"); return true; }

3、java业务逻辑层调用发送邮箱、验证码加密存储在session中

@RequestMapping("/sendEMail.do")  public void sendEMail(HttpServletRequest request, HttpServletResponse response) {    String json = "{\"success\":false,\"message\":\"操作失败\",\"returnVal\":\"\"}";    boolean res = false;//发送邮件标记     Map
map = new HashMap
(); try { String username = request.getParameter("username"); User user = this.userService.findUserByLoginname(username); if(null == user){ json = "{\"success\":false,\"message\":\"无此人员\",\"returnVal\":\"\"}"; return; } //获取当前绑定邮箱地址 String mail = user.getEmail(); //验证邮箱地址 if(StringUtils.isBlank(mail) || "null".equals(mail)){ json = "{\"success\":false,\"message\":\"当前用户尚未绑定邮箱\",\"returnVal\":\"\"}"; return; } //生成验证码 String checkcode = Common.getCode(); //发送验证码 String _debug = Cache.getInstance().getParams(Constant.UIAS_DEBUG); if("1".equals(_debug)){//调试模式 不真发送 直接回显 map.put("checkcode", checkcode); res = true; }else{//非调试模式 真实发送邮件 //验证是否频繁发送验证码请求 单位 秒 String intervalTime = Cache.getInstance().getParams(Constant.EMAIL_INTERVAL_TIME); Object emailTimeFlag = request.getSession().getAttribute("emailTimeFlag"); boolean checkTime = true; if (emailTimeFlag != null) { int miao = (int) (((new Date()).getTime() - (Long) emailTimeFlag) / 1000); if (miao <= Integer.parseInt(intervalTime)) { checkTime=false; } } if(checkTime){ //组装数据 String email_validity = Cache.getInstance().getParams(Constant.EMAIL_VALIDITY); String vartime= String.valueOf((Integer.parseInt(email_validity)/60000)); String content = Cache.getInstance().getParams(Constant.EMAIL_CONTENT); String subject = Cache.getInstance().getParams(Constant.EMAIL_SUBJECT); content = content.replaceAll("\\$code", checkcode); content = content.replaceAll("\\$time",vartime); map.put("mail", mail); map.put("subject", subject); map.put("content", content); //调用发送 res = ieMailService.sendEMail(map); }else{ json = "{\"success\":false,\"message\":\"请耐心等待,不要频繁发送验证码申请\",\"returnVal\":\"\"}"; return; } } //发送成功后续操作 if(res){ //把验证时间放在session里 request.getSession().setAttribute("emailTimeFlag", new Date().getTime()); //把验证码放在session里 md5 2次加密验证码 String codeMd5 = DigestUtils.md5Hex((DigestUtils.md5Hex(checkcode).toLowerCase())); request.getSession().setAttribute("emailCodeFlag", codeMd5); if("1".equals(_debug)){ json = "{\"success\":true,\"message\":\"邮箱验证码发送成功,已经待填到验证码框!\",\"returnVal\":\"\",\"checkcode\":\""+checkcode+"\"}"; }else{ json = "{\"success\":true,\"message\":\"邮箱验证码发送成功,请查收邮件!\",\"returnVal\":\"\"}"; } } } catch (Exception e) { logger.error("发送邮件验证码异常", e); }finally{ renderHtml(response, json, "encoding:UTF-8"); } }

4、java验证邮箱,比对session中的验证码和提交上来的验证码

@RequestMapping("/check.do")  public void check(HttpServletRequest request, HttpServletResponse response) {    String json = "{\"success\":false,\"message\":\"操作失败\",\"returnVal\":\"\"}";    try {      //验证码有效期校验      String email_validity = Cache.getInstance().getParams(Constant.EMAIL_VALIDITY);      Object emailTimeFlag = request.getSession().getAttribute("emailTimeFlag");      if (emailTimeFlag != null) {        int miao = (int) (((new Date()).getTime() - (Long) emailTimeFlag) / 1000);        if (miao >= Integer.parseInt(email_validity)) {          json = "{\"success\":false,\"message\":\"验证码已过有效期,请重新获取!\",\"returnVal\":\"\"}";        }else{          //在有效期内 比对验证码准确性          String checkcode = request.getParameter("checkcode");          // md5 2次加密验证码          String codeMd5 = DigestUtils.md5Hex((DigestUtils.md5Hex(checkcode).toLowerCase()));          Object emailCodeFlag = request.getSession().getAttribute("emailCodeFlag");          boolean res = codeMd5.equals(String.valueOf(emailCodeFlag));          if(res){            json = "{\"success\":true,\"message\":\"验证码通过!\",\"returnVal\":\"\"}";          }else{            json = "{\"success\":false,\"message\":\"验证码不匹配,请重新核对!\",\"returnVal\":\"\"}";          }        }      }     } catch (Exception e) {      logger.error("验证码异常", e);    }finally{      renderHtml(response, json, "encoding:UTF-8");    }  }

5、小插曲,java处理要展示到页面的邮箱和手机号加*号隐藏的正则表达式

// 括号表示组,被替换的部分$n表示第n组的内容        mail = mail.replaceAll("(\\w?)(\\w+)(\\w)(@\\w+\\.[a-z]+(\\.[a-z]+)?)", "$1****$3$4");// 括号表示组,被替换的部分$n表示第n组的内容        phone = phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");

6、HTML 获取验证码按钮

7、js 函数调用 按钮60秒倒计时

//获取邮箱验证码function start_mail_button(){  var username = $('#username').val().trim();//用戶名  if('' == username){    ErrorMsg("请输入用户名");    return;  }  $.ajax({    url: basePath+'/sendEMail.do',type: 'post',dataType: 'json',    data: {username: username},    success: function(data){      if(data.success){        SuccMsg(data.message);        //页面获取验证码按钮样式处理         $("#btnMail").attr('disabled','disabled');         var count = 1 ;         var sum = 60;         var i = setInterval(function(){          if(count > 60){           $("#btnMail").attr('disabled',false);           $("#btnMail").val("获取邮箱验证码");           clearInterval(i);          }else{           $("#btnMail").val("剩余"+parseInt(sum - count)+'秒');          }          count++;         },1000);         //debug模式待填         if(data.checkcode){           $("#checkcode").val(data.checkcode);         }      }else{        ErrorMsg("获取失败!"+data.message);      }    }  });   }

8、提交验证码的js没什么特别的,就不上代码了。

总结

以上所述是小编给大家介绍的Java发送邮箱验证码、session校验功能,希望对大家有所帮助,如果大家有任何疑问请给我留言

转载地址:http://ahkio.baihongyu.com/

你可能感兴趣的文章
命令查看java的class字节码文件
查看>>
软件下载链接获取方法
查看>>
libopencv_shape.so.3.0: cannot open shared object file: No such file or directory 解决笔记
查看>>
Linux CentOS6.5下编译安装MySQL 5.6
查看>>
[转]CRT与Windows的关系
查看>>
Oracle 的一个非常好的触发器例子
查看>>
从代码里你可以看到什么?
查看>>
[PAL规范]SAP HANA PAL 自组织映射神经网络算法Self -Organizing Maps编程规范SELFORGMAP
查看>>
【写漂亮的博客】让我们的博客更加漂亮,让我们的博客支持响应式布局!
查看>>
mongodb group包(最具体的、最受欢迎、最容易理解的解释)
查看>>
pyimage search研究
查看>>
Windows2003 + IIS6 安装.Net FrameWork 4.0 兼容早期版本的测试
查看>>
大二实习使用的技术汇总(下)
查看>>
【转】python中常用第三方包os sys
查看>>
[算法][递归] 整数划分 种类数
查看>>
关于css打包后过大的问题
查看>>
[ JavaScript ] 数据结构与算法 —— 队列
查看>>
angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
查看>>
centos nginx下配置免费https
查看>>
Cookie&Session、LocalStorage&SessionStorage、HTTP缓存
查看>>