欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java發(fā)送郵箱驗(yàn)證碼、session校驗(yàn)功能

 更新時(shí)間:2018年02月09日 11:06:43   作者:#城市之光  
本篇主要描述“發(fā)送郵箱驗(yàn)證碼、session校驗(yàn)”相關(guān)前(html\js)后(java)臺(tái)代碼,業(yè)務(wù)邏輯示例,需要的朋友可以參考下

本篇主要描述“發(fā)送郵箱驗(yàn)證碼、session校驗(yàn)”相關(guān)前(html\js)后(java)臺(tái)代碼,業(yè)務(wù)邏輯示例,閑話少訴,直接上代碼。

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

2、java底層發(fā)送郵箱方法

public boolean sendEMail(Map<String, Object> map) {
    log.info("電子郵件接口執(zhí)行開(kāi)始!");
    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+")、內(nèi)容("+content+")有為空項(xiàng),不符合發(fā)送條件");
      return false;
    }
    try{
       Properties props = new Properties();
       props.setProperty("mail.transport.protocol", "smtp"); // 使用的協(xié)議(JavaMail規(guī)范要求)
       props.setProperty("mail.smtp.host", smtpHost); // 發(fā)件人的郵箱的 SMTP服務(wù)器地址
       props.setProperty("mail.smtp.auth", "true"); // 請(qǐng)求認(rèn)證,參數(shù)名稱與具體實(shí)現(xiàn)有關(guān)
       // 創(chuàng)建Session實(shí)例對(duì)象
       Session session = Session.getDefaultInstance(props);
       // 創(chuàng)建MimeMessage實(shí)例對(duì)象
       MimeMessage message = new MimeMessage(session);
       // 設(shè)置發(fā)件人
       message.setFrom(new InternetAddress(from));
       // 設(shè)置收件人
       message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
       // 設(shè)置發(fā)送日期
       message.setSentDate(new Date());
       // 設(shè)置郵件主題
       message.setSubject(subject);
       // 設(shè)置純文本內(nèi)容的郵件正文
       message.setText(content);
       // 保存并生成最終的郵件內(nèi)容
       message.saveChanges();
       // 設(shè)置為debug模式, 可以查看詳細(xì)的發(fā)送 log
       session.setDebug(true);
       // 獲取Transport對(duì)象
       Transport transport = session.getTransport("smtp");
       // 第2個(gè)參數(shù)需要填寫(xiě)的是QQ郵箱的SMTP的授權(quán)碼,什么是授權(quán)碼,它又是如何設(shè)置?
       transport.connect(from, pwd);
       // 發(fā)送,message.getAllRecipients() 獲取到的是在創(chuàng)建郵件對(duì)象時(shí)添加的所有收件人, 抄送人, 密送人
       transport.sendMessage(message, message.getAllRecipients());
       transport.close();
    }catch(Exception e){
      log.error(e.getMessage(), e);
      return false;
    }
    log.info("電子郵件接口執(zhí)行完成,執(zhí)行成功!");
    return true;
  }

3、java業(yè)務(wù)邏輯層調(diào)用發(fā)送郵箱、驗(yàn)證碼加密存儲(chǔ)在session中

@RequestMapping("/sendEMail.do")
  public void sendEMail(HttpServletRequest request, HttpServletResponse response) {
    String json = "{\"success\":false,\"message\":\"操作失敗\",\"returnVal\":\"\"}";
    boolean res = false;//發(fā)送郵件標(biāo)記 
    Map<String, Object> map = new HashMap<String, Object>();
    try {
      String username = request.getParameter("username");
      User user = this.userService.findUserByLoginname(username);
      if(null == user){
        json = "{\"success\":false,\"message\":\"無(wú)此人員\",\"returnVal\":\"\"}";
        return;
      }
      //獲取當(dāng)前綁定郵箱地址
      String mail = user.getEmail();
      //驗(yàn)證郵箱地址
      if(StringUtils.isBlank(mail) || "null".equals(mail)){
        json = "{\"success\":false,\"message\":\"當(dāng)前用戶尚未綁定郵箱\",\"returnVal\":\"\"}";
        return;
      }
      //生成驗(yàn)證碼
      String checkcode = Common.getCode();
      //發(fā)送驗(yàn)證碼
      String _debug = Cache.getInstance().getParams(Constant.UIAS_DEBUG);
      if("1".equals(_debug)){//調(diào)試模式 不真發(fā)送 直接回顯
        map.put("checkcode", checkcode);
        res = true;
      }else{//非調(diào)試模式 真實(shí)發(fā)送郵件
        //驗(yàn)證是否頻繁發(fā)送驗(yàn)證碼請(qǐng)求  單位 秒
        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){
          //組裝數(shù)據(jù)
          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);
          //調(diào)用發(fā)送
          res = ieMailService.sendEMail(map);
        }else{
          json = "{\"success\":false,\"message\":\"請(qǐng)耐心等待,不要頻繁發(fā)送驗(yàn)證碼申請(qǐng)\",\"returnVal\":\"\"}";
          return;
        }
      }
      //發(fā)送成功后續(xù)操作
      if(res){
        //把驗(yàn)證時(shí)間放在session里
        request.getSession().setAttribute("emailTimeFlag", new Date().getTime());
        //把驗(yàn)證碼放在session里  md5 2次加密驗(yàn)證碼
        String codeMd5 = DigestUtils.md5Hex((DigestUtils.md5Hex(checkcode).toLowerCase()));
        request.getSession().setAttribute("emailCodeFlag", codeMd5);
        if("1".equals(_debug)){
          json = "{\"success\":true,\"message\":\"郵箱驗(yàn)證碼發(fā)送成功,已經(jīng)待填到驗(yàn)證碼框!\",\"returnVal\":\"\",\"checkcode\":\""+checkcode+"\"}";
        }else{
          json = "{\"success\":true,\"message\":\"郵箱驗(yàn)證碼發(fā)送成功,請(qǐng)查收郵件!\",\"returnVal\":\"\"}";
        }
      }
    } catch (Exception e) {
      logger.error("發(fā)送郵件驗(yàn)證碼異常", e);
    }finally{
      renderHtml(response, json, "encoding:UTF-8");
    }
  }

 4、java驗(yàn)證郵箱,比對(duì)session中的驗(yàn)證碼和提交上來(lái)的驗(yàn)證碼

@RequestMapping("/check.do")
  public void check(HttpServletRequest request, HttpServletResponse response) {
    String json = "{\"success\":false,\"message\":\"操作失敗\",\"returnVal\":\"\"}";
    try {
      //驗(yàn)證碼有效期校驗(yàn)
      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\":\"驗(yàn)證碼已過(guò)有效期,請(qǐng)重新獲??!\",\"returnVal\":\"\"}";
        }else{
          //在有效期內(nèi) 比對(duì)驗(yàn)證碼準(zhǔn)確性
          String checkcode = request.getParameter("checkcode");
          // md5 2次加密驗(yàn)證碼
          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\":\"驗(yàn)證碼通過(guò)!\",\"returnVal\":\"\"}";
          }else{
            json = "{\"success\":false,\"message\":\"驗(yàn)證碼不匹配,請(qǐng)重新核對(duì)!\",\"returnVal\":\"\"}";
          }
        }
      } 
    } catch (Exception e) {
      logger.error("驗(yàn)證碼異常", e);
    }finally{
      renderHtml(response, json, "encoding:UTF-8");
    }
  }

5、小插曲,java處理要展示到頁(yè)面的郵箱和手機(jī)號(hào)加*號(hào)隱藏的正則表達(dá)式

// 括號(hào)表示組,被替換的部分$n表示第n組的內(nèi)容
        mail = mail.replaceAll("(\\w?)(\\w+)(\\w)(@\\w+\\.[a-z]+(\\.[a-z]+)?)", "$1****$3$4");
// 括號(hào)表示組,被替換的部分$n表示第n組的內(nèi)容
        phone = phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");

6、HTML 獲取驗(yàn)證碼按鈕                 

 <input id="btnMail" type="button" onclick="start_mail_button();" value="獲取郵件驗(yàn)證碼" />

7、js 函數(shù)調(diào)用  按鈕60秒倒計(jì)時(shí)

//獲取郵箱驗(yàn)證碼
function start_mail_button(){
  var username = $('#username').val().trim();//用戶名
  if('' == username){
    ErrorMsg("請(qǐng)輸入用戶名");
    return;
  }
  $.ajax({
    url: basePath+'/sendEMail.do',type: 'post',dataType: 'json',
    data: {username: username},
    success: function(data){
      if(data.success){
        SuccMsg(data.message);
        //頁(yè)面獲取驗(yàn)證碼按鈕樣式處理
         $("#btnMail").attr('disabled','disabled');
         var count = 1 ;
         var sum = 60;
         var i = setInterval(function(){
          if(count > 60){
           $("#btnMail").attr('disabled',false);
           $("#btnMail").val("獲取郵箱驗(yàn)證碼");
           clearInterval(i);
          }else{
           $("#btnMail").val("剩余"+parseInt(sum - count)+'秒');
          }
          count++;
         },1000);
         //debug模式待填
         if(data.checkcode){
           $("#checkcode").val(data.checkcode);
         }
      }else{
        ErrorMsg("獲取失敗!"+data.message);
      }
    }
  });
  
}

8、提交驗(yàn)證碼的js沒(méi)什么特別的,就不上代碼了。

總結(jié)

以上所述是小編給大家介紹的Java發(fā)送郵箱驗(yàn)證碼、session校驗(yàn)功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • SpringBoot整合Mybatis-plus的具體使用

    SpringBoot整合Mybatis-plus的具體使用

    本文主要介紹了SpringBoot整合Mybatis-plus的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • SpringMVC 整合SSM框架詳解

    SpringMVC 整合SSM框架詳解

    這篇文章主要介紹了SpringMVC 整合SSM框架詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java創(chuàng)建多線程的幾種方式實(shí)現(xiàn)

    Java創(chuàng)建多線程的幾種方式實(shí)現(xiàn)

    這篇文章主要介紹了Java創(chuàng)建多線程的幾種方式實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Spring MVC請(qǐng)求參數(shù)的獲取教程指南

    Spring MVC請(qǐng)求參數(shù)的獲取教程指南

    本文介紹了SpringMVC中如何獲取各種類型的請(qǐng)求參數(shù),包括基本類型、POJO、數(shù)組、集合以及RESTful風(fēng)格的參數(shù),還討論了請(qǐng)求參數(shù)中文亂碼的解決方案,參數(shù)綁定的注解如@RequestParam,以及自定義類型轉(zhuǎn)換器的實(shí)現(xiàn),需要的朋友可以參考下
    2024-10-10
  • Java DatabaseMetaData用法案例詳解

    Java DatabaseMetaData用法案例詳解

    這篇文章主要介紹了Java DatabaseMetaData用法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java8 Comparator: 列表排序的深入講解

    Java8 Comparator: 列表排序的深入講解

    這篇文章主要給大家介紹了關(guān)于Java 8 Comparator: 列表排序的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java8具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • PowerJobAutoConfiguration自動(dòng)配置源碼流程解析

    PowerJobAutoConfiguration自動(dòng)配置源碼流程解析

    這篇文章主要為大家介紹了PowerJobAutoConfiguration自動(dòng)配置源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Pattern.compile函數(shù)提取字符串中指定的字符(推薦)

    Pattern.compile函數(shù)提取字符串中指定的字符(推薦)

    這篇文章主要介紹了Pattern.compile函數(shù)提取字符串中指定的字符,使用的是Java中的Pattern.compile函數(shù)來(lái)實(shí)現(xiàn)對(duì)指定字符串的截取,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Java?Zip壓縮之簡(jiǎn)化文件和文件夾的壓縮操作

    Java?Zip壓縮之簡(jiǎn)化文件和文件夾的壓縮操作

    這篇文章主要給大家介紹了關(guān)于Java?Zip壓縮之簡(jiǎn)化文件和文件夾的壓縮操作,Zip壓縮是一種常見(jiàn)的文件壓縮格式,它將多個(gè)文件和文件夾打包成一個(gè)以.zip為后綴的壓縮包,需要的朋友可以參考下
    2023-10-10
  • 淺析Java中的SPI原理

    淺析Java中的SPI原理

    SPI:由調(diào)用方制定接口標(biāo)準(zhǔn),實(shí)現(xiàn)方來(lái)針對(duì)接口提供不同的實(shí)現(xiàn),SPI其實(shí)就是"為接口查找實(shí)現(xiàn)"的一種服務(wù)發(fā)現(xiàn)機(jī)制。本文將淺談一下SPI機(jī)制的原理,需要的可以參考一下
    2022-09-09

最新評(píng)論