Java視頻教程之Java發(fā)送郵箱驗(yàn)證碼、session校驗(yàn)功能詳解
Java大家都比較熟悉了,但是Java發(fā)送郵箱驗(yàn)證碼、session校驗(yàn)功能還有不少的小伙伴沒有弄明白,廢話不多說了,下面小編就帶大家看一下扣丁學(xué)堂Java在線視頻講解的Java發(fā)送郵箱驗(yàn)證碼、session校驗(yàn)功能,下面我們開始吧:
1、引入的jar包是mail-1.4.jar
2、java底層發(fā)送郵箱方法
public boolean sendEMail(Map<String, Object> map) { log.info("電子郵件接口執(zhí)行開始!"); 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ù)需要填寫的是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\":\"無此人員\",\"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)證碼和提交上來的驗(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)證碼已過有效期,請(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)證碼通過!\",\"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沒什么特別的,就不上代碼了。
以上就是扣丁學(xué)堂Java在線視頻講解Java發(fā)送郵箱驗(yàn)證碼、session校驗(yàn)功能,想要了解更多內(nèi)容的小伙伴請(qǐng)關(guān)注扣丁學(xué)堂官網(wǎng)、微信等平臺(tái),想要參加Java培訓(xùn)學(xué)習(xí)Java開發(fā)的小伙伴不要在猶豫了,扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的Java技術(shù)視頻教程系統(tǒng),通過千鋒扣丁學(xué)堂金牌講師錄制的Java在線教程定能讓你快速掌握J(rèn)ava技術(shù)的從入門到精通開發(fā)實(shí)戰(zhàn)技能??鄱W(xué)堂java技術(shù)交流群:487098661。微信號(hào):codingbb
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。