Java发送邮箱验证码、session校验功能
本篇主要描述“发送邮箱验证码、session校验”相关前(html\js)后(java)台代码,业务逻辑示例,闲话少诉,直接上代码。
1、引入的jar包是mail-1.4.jar
2、java底层发送邮箱方法
publicbooleansendEMail(Mapmap){ log.info("電子郵件接口執行開始!"); Stringfrom=Cache.getInstance().getParamsConstant.EMAIL_FROM); Stringpwd=Cache.getInstance().getParams(Constant.EMAIL_PWD); Stringto=String.valueOf(map.get("mail")); Stringsubject=String.valueOf(map.get("subject")); Stringcontent=String.valueOf(map.get("content")); StringsmtpHost=Cache.getInstance().getParams(Constant.EMAIL_SMTPHOST); if(StringUtils.isBlank(to)||StringUtils.isBlank(subject)||StringUtils.isBlank(content)){ log.info("郵件地址("+to+")、主題("+subject+")、內容("+content+")有為空項,不符合發送條件"); returnfalse; } try{ Propertiesprops=newProperties(); props.setProperty("mail.transport.protocol","smtp");//使用的协议(JavaMail规范要求) props.setProperty("mail.smtp.host",smtpHost);//发件人的邮箱的SMTP服务器地址 props.setProperty("mail.smtp.auth","true");//请求认证,参数名称与具体实现有关 //创建Session实例对象 Sessionsession=Session.getDefaultInstance(props); //创建MimeMessage实例对象 MimeMessagemessage=newMimeMessage(session); //设置发件人 message.setFrom(newInternetAddress(from)); //设置收件人 message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to)); //设置发送日期 message.setSentDate(newDate()); //设置邮件主题 message.setSubject(subject); //设置纯文本内容的邮件正文 message.setText(content); //保存并生成最终的邮件内容 message.saveChanges(); //设置为debug模式,可以查看详细的发送log session.setDebug(true); //获取Transport对象 Transporttransport=session.getTransport("smtp"); //第2个参数需要填写的是QQ邮箱的SMTP的授权码,什么是授权码,它又是如何设置? transport.connect(from,pwd); //发送,message.getAllRecipients()获取到的是在创建邮件对象时添加的所有收件人,抄送人,密送人 transport.sendMessage(message,message.getAllRecipients()); transport.close(); }catch(Exceptione){ log.error(e.getMessage(),e); returnfalse; } log.info("電子郵件接口執行完成,執行成功!"); returntrue; }
3、java业务逻辑层调用发送邮箱、验证码加密存储在session中
@RequestMapping("/sendEMail.do")
publicvoidsendEMail(HttpServletRequestrequest,HttpServletResponseresponse){
Stringjson="{\"success\":false,\"message\":\"操作失败\",\"returnVal\":\"\"}";
booleanres=false;//发送邮件标记
Mapmap=newHashMap();
try{
Stringusername=request.getParameter("username");
Useruser=this.userService.findUserByLoginname(username);
if(null==user){
json="{\"success\":false,\"message\":\"无此人员\",\"returnVal\":\"\"}";
return;
}
//获取当前绑定邮箱地址
Stringmail=user.getEmail();
//验证邮箱地址
if(StringUtils.isBlank(mail)||"null".equals(mail)){
json="{\"success\":false,\"message\":\"当前用户尚未绑定邮箱\",\"returnVal\":\"\"}";
return;
}
//生成验证码
Stringcheckcode=Common.getCode();
//发送验证码
String_debug=Cache.getInstance().getParams(Constant.UIAS_DEBUG);
if("1".equals(_debug)){//调试模式不真发送直接回显
map.put("checkcode",checkcode);
res=true;
}else{//非调试模式真实发送邮件
//验证是否频繁发送验证码请求单位秒
StringintervalTime=Cache.getInstance().getParams(Constant.EMAIL_INTERVAL_TIME);
ObjectemailTimeFlag=request.getSession().getAttribute("emailTimeFlag");
booleancheckTime=true;
if(emailTimeFlag!=null){
intmiao=(int)(((newDate()).getTime()-(Long)emailTimeFlag)/1000);
if(miao<=Integer.parseInt(intervalTime)){
checkTime=false;
}
}
if(checkTime){
//组装数据
Stringemail_validity=Cache.getInstance().getParams(Constant.EMAIL_VALIDITY);
Stringvartime=String.valueOf((Integer.parseInt(email_validity)/60000));
Stringcontent=Cache.getInstance().getParams(Constant.EMAIL_CONTENT);
Stringsubject=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",newDate().getTime());
//把验证码放在session里md52次加密验证码
StringcodeMd5=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(Exceptione){
logger.error("发送邮件验证码异常",e);
}finally{
renderHtml(response,json,"encoding:UTF-8");
}
}
4、java验证邮箱,比对session中的验证码和提交上来的验证码
@RequestMapping("/check.do")
publicvoidcheck(HttpServletRequestrequest,HttpServletResponseresponse){
Stringjson="{\"success\":false,\"message\":\"操作失败\",\"returnVal\":\"\"}";
try{
//验证码有效期校验
Stringemail_validity=Cache.getInstance().getParams(Constant.EMAIL_VALIDITY);
ObjectemailTimeFlag=request.getSession().getAttribute("emailTimeFlag");
if(emailTimeFlag!=null){
intmiao=(int)(((newDate()).getTime()-(Long)emailTimeFlag)/1000);
if(miao>=Integer.parseInt(email_validity)){
json="{\"success\":false,\"message\":\"验证码已过有效期,请重新获取!\",\"returnVal\":\"\"}";
}else{
//在有效期内比对验证码准确性
Stringcheckcode=request.getParameter("checkcode");
//md52次加密验证码
StringcodeMd5=DigestUtils.md5Hex((DigestUtils.md5Hex(checkcode).toLowerCase()));
ObjectemailCodeFlag=request.getSession().getAttribute("emailCodeFlag");
booleanres=codeMd5.equals(String.valueOf(emailCodeFlag));
if(res){
json="{\"success\":true,\"message\":\"验证码通过!\",\"returnVal\":\"\"}";
}else{
json="{\"success\":false,\"message\":\"验证码不匹配,请重新核对!\",\"returnVal\":\"\"}";
}
}
}
}catch(Exceptione){
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秒倒计时
//获取邮箱验证码
functionstart_mail_button(){
varusername=$('#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');
varcount=1;
varsum=60;
vari=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校验功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!