本文实例为大家分享了java实现通过绑定邮箱找回密码功能,供大家参考,具体内容如下
1.输入用户名及验证码,验证用户名是否存在
(1).生成验证码工具类
package com.utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.HashMap; import java.util.Map; import java.util.Random; /** * @Title: GraphicsUtil.java * @copyright * @Package com.utils * @Description: TODO(这里用一句话描述这个类的作用) * @author Mr.chen * @date 2016-11-2 下午03:31:30 */ public class GraphicsUtil { private Font mFont = new Font("Times New Roman", Font.PLAIN, 17); Color getRandColor(int fc,int bc){ Random random = new Random(); if(fc>255) fc=255; if(bc>255) bc=255; int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); } public Map<String, Object> getGraphics(){ int width=100,height=18; BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR); Graphics g=image.getGraphics(); Random random = new Random(); g.setColor(getRandColor(200,250)); g.fillRect(1, 1, width-1, height-1); g.setColor(new Color(102,102,102)); g.drawRect(0, 0, width-1, height-1); g.setFont(mFont); g.setColor(getRandColor(160,200)); //画随机线 for (int i=0;i<155;i++){ int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int xl = random.nextInt(6) + 1; int yl = random.nextInt(12) + 1; g.drawLine(x,y,x + xl,y + yl); } //从另一方向画随机线 for (int i = 0;i < 70;i++){ int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int xl = random.nextInt(12) + 1; int yl = random.nextInt(6) + 1; g.drawLine(x,y,x - xl,y - yl); } //生成随机数,并将随机数字转换为字母 String sRand=""; for (int i=0;i<6;i++){ int itmp = random.nextInt(26) + 65; char ctmp = (char)itmp; sRand += String.valueOf(ctmp); g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); g.drawString(String.valueOf(ctmp),15*i+10,16); } g.dispose(); Map<String, Object> map=new HashMap<String, Object>(); map.put("rand", sRand); map.put("image", image); return map; } }
(2).生成验证码action
/** * @Description: 获取验证码 * @author Mr.chen * @date 2016-11-2 下午03:45:28 */ public void getCode(){ try { HttpServletResponse response = ServletActionContext.getResponse(); HttpServletRequest request= ServletActionContext.getRequest(); response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); //表明生成的响应是图片 response.setContentType("image/jpeg"); Map<String, Object> map=new GraphicsUtil().getGraphics(); System.out.println(map.get("rand")); request.getSession().setAttribute("rand", map.get("rand")); ImageIO.write((RenderedImage) map.get("image"), "JPEG", response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } } (3).验证用户名是否存在 /** * @Description: 检查用户名是否存在 * @author Mr.chen * @date 2016-11-2 下午04:49:02 */ public void checkUsernumber(){ try { HttpServletResponse response = ServletActionContext.getResponse(); HttpServletRequest request= ServletActionContext.getRequest(); String usernumber = request.getParameter("usernumber"); Studentinfo stu= studentinfoService.getStudentinfoByUsernumber(usernumber); response.setContentType("text/plain; charset=utf-8"); response.setCharacterEncoding("UTF-8"); if(stu==null){ response.getWriter().print("false"); }else{ if(!StringUtils.isBlank(stu.getEmail())){ response.getWriter().print("true"); }else{ response.getWriter().print("notEmail"); } } response.getWriter().flush(); response.getWriter().close(); } catch (IOException e) { e.printStackTrace(); } }
2.用户名验证通过后往绑定邮箱发送邮件
/** * @Description: 发送邮件 * @author Mr.chen * @date 2016-11-2 下午05:06:24 */ @SuppressWarnings("static-access") public String toFindPassword2(){ HttpServletRequest request= ServletActionContext.getRequest(); String usernumber = request.getParameter("usernumber"); Studentinfo stu= studentinfoService.getStudentinfoByUsernumber(usernumber); try { Properties prop = new Properties(); prop.setProperty("mail.transport.protocol", "smtp"); prop.setProperty("mail.smtp.host", "smtp.qq.com"); prop.setProperty("mail.smtp.auth", "true"); prop.put("mail.smtp.port","587"); prop.setProperty("mail.debug", "true"); //验证写信者邮箱,此处使用第三方授权码登陆,使用密码不知道为什么登录不上 Authenticator authenticator = new PopAuthenticator("123456789@qq.com", "**************"); //创建会话 Session session = Session.getInstance(prop,authenticator); //填写信封写信 Message msg = new MimeMessage(session); //设置发邮件的原地址 msg.setFrom(new InternetAddress("123456789@qq.com")); //设置接收人 msg.setRecipient(RecipientType.TO, new InternetAddress(stu.getEmail())); msg.setSubject("找回密码!"); msg.setText(this.createLink(stu)); //验证用户名密码发送邮件 Transport transport = session.getTransport(); transport.send(msg); request.setAttribute("stu", stu); return SUCCESS; }catch(Exception e){ e.printStackTrace(); } return ERROR; }
/** * @Description: 生成邮箱链接地址 * @author Mr.chen * @date 2016-11-3 下午01:50:14 */ public String createLink(Studentinfo stu){ //生成密钥 String secretKey=UUID.randomUUID().toString(); //设置过期时间 Date outDate = new Date(System.currentTimeMillis() + 30 * 60 * 1000);// 30分钟后过期 System.out.println(System.currentTimeMillis()); long date = outDate.getTime() / 1000 * 1000;// 忽略毫秒数 mySql 取出时间是忽略毫秒数的 //此处应该更新Studentinfo表中的过期时间、密钥信息 stu.setOutDate(date); stu.setValidataCode(secretKey); studentinfoService.updateStudentinfo(stu); //将用户名、过期时间、密钥生成链接密钥 String key =stu.getUsernumber() + "$" + date + "$" + secretKey; String digitalSignature = MD5Util.getMd5(key);// 数字签名 HttpServletRequest request= ServletActionContext.getRequest(); String path=request.getContextPath(); String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path; String resetPassHref = basePath + "/toFindPassword3.action?sid="+ digitalSignature +"&id="+stu.getId(); String emailContent = "请勿回复本邮件.点击下面的链接,重设密码,本邮件超过30分钟,链接将会失效,需要重新申请找回密码." + resetPassHref; return emailContent; }
3.邮件发送成功后进入邮箱,通过该链接进入修改密码请求,链接验证通过后进入修改密码页面
/** * @Description: 该方法用于处理从邮箱链接过来的修改密码请求 * @author Mr.chen * @date 2016-11-3 下午02:24:17 */ public String toFindPassword3(){ String message=""; HttpServletRequest request= ServletActionContext.getRequest(); //获取链接中的加密字符串 String sid=request.getParameter("sid"); //获取链接中的用户名 String id=request.getParameter("id"); if(StringUtils.isBlank(sid)||StringUtils.isBlank(id)){ System.out.println("请求的链接不正确,请重新操作."); message="请求的链接不正确,请重新操作."; } Studentinfo stu=studentinfoService.getStudentinfoById(Long.parseLong(id)); if(stu!=null){ //获取当前用户申请找回密码的过期时间 //找回密码链接已经过期 if(stu.getOutDate()<=System.currentTimeMillis()){ System.out.println("链接已经过期"); message="链接已经过期"; } //获取当前登陆人的加密码 String key = stu.getUsernumber()+"$"+stu.getOutDate()/1000*1000+"$"+stu.getValidataCode();//数字签名 String digitalSignature = MD5Util.getMd5(key);// 数字签名 if(!digitalSignature.equals(sid)){ System.out.println("链接加密密码不正确"); message="链接加密密码不正确"; }else{ //验证成功,跳入到修改密码界面 request.setAttribute("stu", stu); } }else{ System.out.println("用户信息不存在"); message="用户信息不存在"; request.setAttribute("message", message); } return SUCCESS; }
4.输入新密码,验证成功后即修改成功
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Java实现邮箱找回密码实例代码,包括了Java实现邮箱找回密码实例代码的使用技巧和注意事项,需要的朋友参考一下 通过邮件找回密码功能的实现 1、最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回。现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回。通过java发送邮件的功能我就不说了,重点讲找回密码。 2、参考别人的思路:发送邮件→请求邮件
本文向大家介绍django 开发忘记密码通过邮箱找回功能示例,包括了django 开发忘记密码通过邮箱找回功能示例的使用技巧和注意事项,需要的朋友参考一下 一、流程分析: 1.点击忘记密码====》forget.html页面,输入邮箱和验证码,发送验证链接网址的邮件====》发送成功,跳到send_success.html提示 2.到邮箱里找到验证链接网址,访问重设密码网址reset.html==
本文向大家介绍Django实现发送邮件找回密码功能,包括了Django实现发送邮件找回密码功能的使用技巧和注意事项,需要的朋友参考一下 在各大网站上,一定都遇到过找回密码的问题,通常采用的方式是通过发送带有验证码的邮件进行身份验证,本文将介绍通过Django实现邮件找回密码功能。 找回密码流程 功能流程: 1.首先在用户登录界面,添加“忘记密码”链接 2.生成随机验证码,发送邮件到用户信息中填写邮
本文向大家介绍thinkphp实现发送邮件密码找回功能实例,包括了thinkphp实现发送邮件密码找回功能实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了thinkphp实现发送邮件密码找回功能的方法。分享给大家供大家参考。具体实现方法如下: 首先下载mail.class.php类文件,配置文件中定义下列参数: 在tp项目org中放入mail.class.php,使用时候引入 impo
本文向大家介绍JavaWeb利用邮箱帮用户找回密码,包括了JavaWeb利用邮箱帮用户找回密码的使用技巧和注意事项,需要的朋友参考一下 本文是介绍在一个小的JAVAWeb项目中,利用邮箱帮用户找回密码。 效果展示 需要一个发送邮件的jar包 : javax.mail .jar 1.JSP页面(设置邮箱输入框) 2.Servlet代码(根据用户输入的邮箱账号找到用户,并生成发送邮件类的实例,再
本文向大家介绍Java实现邮箱发送功能实例(阿里云邮箱推送),包括了Java实现邮箱发送功能实例(阿里云邮箱推送)的使用技巧和注意事项,需要的朋友参考一下 前言 绑定阿里云域名,创建域名账户,并配置解析域名账户,获得发送邮箱的权限,上限两百封,超出要¥… 阿里云邮件推送控制台 https://www.aliyun.com/product/directmail 申请邮箱并解析域名 https://y