java实现通过绑定邮箱找回密码功能_Java实现邮箱找回密码实例代码
发布日期:2021-08-19 22:59:12 浏览次数:12 分类:技术文章

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

通过邮件找回密码功能的实现

1、最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回。现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回。通过java发送邮件的功能我就不说了,重点讲找回密码。

2、参考别人的思路:发送邮件→请求邮件里的URL→验证url→{验证成功修改密码,不成功跳转到失败页面}

重点就是如何生成这个url和如何解析这个url.

需要注意的是一个url只能修改一次密码,当同一帐号发送多封邮件,只有最后一封邮件的url 邮箱

3、加密能防止伪造攻击,一次url只能验证一次,并且绑定了用户。生成url:   可以用UUID生成随机密钥。

数字签名 = MD5(用户名+'′+过期时间+‘′+过期时间+‘'+密钥key)

数据库字段(用户名(主键),密钥key,过期时间)

url参数(用户名,数字签名) ,密钥key的生成:在每一个用户找回密码时候为这个用户生成一个密钥key ,

生成过期时间,生成数字签名,生成url,发送邮件.   AddU(用户名,密钥key,过期时间)

使用到的数据库如下 :

1e09ea73c855f404d0b1c99826f93149.png

找回邮箱密码代码如下:

package com.soq.card.web.action;

import java.sql.Timestamp;

import java.util.List;

import java.util.UUID;

import org.hibernate.Criteria;

import org.hibernate.Session;

import org.hibernatmysql 取出时间是忽略毫秒数的

DBhepler bhepler=new DBhepler();

String sql="update users set outDate=?,validataCode=? where loginName=?;";

String str[] ={outDate+"",secretKey,users.getLoginName()};

bhepler.AddU(sql, str);

//this.getUserHander().getUsersDAO().getHibernateTemplate().update(users); // 保存到数据库

System.out.println(" UserName>>>> "+users.getUserName());

String key =users.getUserName() + "$" + date + "$" + secretKeyhttp://www.cppcns.com密码.");

System.out.println("时间 超时");

return "error";

}

String key = users.getUserName()+"$"+outDate.getTime()/1000*1000+"$"+users.getValidataCode();//数字签名

System.out.println("key link》》"+key);

String digitalSignature = Md5.md5(key);// 数字签名

System.out.println("digitalSignature>>>>"+digitalSignature);

if(!digitalSignature.equals(sid)) {

this.getRequest().setAttribute("mesg", "链接不正确,是否已经过期了?重新申请吧.");

System.out.println("标示不正确");

return "error";

}else {

//链接验证通过 转到修改密码页面

this.getRequest().setAttribute("user", users);

return "success";

}

}else {

this.getRequest().setAttribute("mesg", "链接错误,无法找到匹配用户,请重新申请找回密码.");

System.out.println("用户不存在");

return "error";

}

}

public Users getUsers() {

return users;http://www.cppcns.coml;

}

public void setEmail(String email) {

this.email = email;

}

public String getSid() {

return sid;

}

public void setSid(String sid) {

this.sid = sid;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

}

补充1:Timestamp类型对象在保存到数据的时候 毫秒精度会丢失。比如:2014-05-20 10:30:10.234  存到mysql数据库的时候 变成 2013-05-20 10:30:10.0。时间变得不相同了,sid 匹配的时候不会相等。 所以我做了忽略精度的操作。

补充2:解决linux下面title中文乱码

sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();

mailMessage.setSubject(MimeUtility.encodeText(mailInfo.getSubject(), "UTF-8", "B")); //解决linux邮件title乱码

补充3:怎么不直接把sid插入到users表呢。验证的时候直接比较sid就ok了。

源码下载地址:http://pan.baidu.com/s/1cl8hKq

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: Java实现邮箱找回密码实例代码

本文地址: http://www.cppcns.com/ruanjian/java/168853.html

转载地址:https://blog.csdn.net/weixin_31034309/article/details/115090847 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:php post 大量数据_php解决post大量数据时的丢失问题
下一篇:java 日期在周中的数值_java日期转换提供了一周中的一天

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年01月06日 15时19分34秒