忘记密码 通过邮件找回

解决用户忘记密码 ,通过发邮件找回

@Action("send")
public String sendMail() {
    accountServices.sendForgetMail(email);
    return SUCCESS;
}
// 通过数据库查询输入框中email的账号,有了这个账号再真正发送,
//    在线程里的属性要写成常量
    public void sendForgetMail(final String email) {

        Account account = accountDao.findByemail(email);

        if(account != null) {
            /* 在发送的邮件中,要传入所找回密码的账户的邮箱,和token
                token的作用是唯一性,防止修改url中的邮箱来乱改密码
                */
            final String token = UUID.randomUUID().toString();
                /* 放入缓存中,5分钟后失效 */
            Cache.put("forget:"+email, 300, token);
            /* 发邮件是个过程,不能等发送完在跳转,将发送放入一个线程 */
            Thread thread = new Thread(new Runnable() {

                public void run() {

                    HtmlEmail mail = new HtmlEmail();
                    //设置主机服务器地址
                    mail.setHostName("smtp.126.com");
                    mail.setAuthentication("kaishengit", "[email protected]@rd");
                    // 是否需要验证
                    mail.setTLS(true);
                    mail.setCharset("UTF-8");

                    try {
                    // 发件人
                        mail.setFrom("[email protected]");
                        // 主题
                        mail.setSubject("密码找回邮件");
                        // 内容
                        mail.setHtmlMsg("点击此链接找回密码:<a href=\"http://localhost/forget/validate.action?email="+email+"&token="+token+"\">重置密码</a>");
                        mail.addTo(email);
                        mail.send();

                    } catch (EmailException e) {
                        e.printStackTrace();
                    }
                }
            });

            thread.start();
        }

    }
// 缓存写成工具类
public class Cache {

    private static MemcachedClient client = buildeClient();

    private static MemcachedClient buildeClient() {
        try {
            return new MemcachedClient(AddrUtil.getAddresses("127.0.0.1:11211"));
        } catch (IOException e) {
            throw new RuntimeException("MemcachedClient 获取错误", e);
        }
    }

    public static void put(String key,int time,Object value) {
        client.add(key, time, value);
    }

    public static Object get(String key) {
        return client.get(key);
    }

    public static void remove(String key) {
        client.delete(key);
    }

}

点击邮箱里的找回密码

@Action("validate")
public String callbackToken() {
account = accountServices.validateMailAndToken(email,token);
    if(account == null) {
        return INPUT;
    }
    return SUCCESS;
}
//service中
public Account validateMailAndToken(String email, String token) {
        String cacheToken = (String) Cache.get("forget:"+email);
        if(cacheToken == null) {
            System.out.println("获取不了token");
            return null;
        } else {
            if(token.equals(cacheToken)) {
                Cache.remove("forget:"+email);
                return accountDao.findByemail(email);
            } else {
                System.out.println("两个token不一致");
                return null;
            }
        }
    }
时间: 2024-10-28 22:02:39

忘记密码 通过邮件找回的相关文章

django 开发忘记密码通过邮箱找回功能

一.流程分析: 1.点击忘记密码====>forget.html页面,输入邮箱和验证码,发送验证链接网址的邮件====>发送成功,跳到send_success.html提示 2.到邮箱里找到验证链接网址,访问重设密码网址reset.html===>重设密码提交数据,成功则返回首页,失败则返回错误信息 二. 1.users/forms.py文件中 from django import forms from captcha.fields import CaptchaField .......

windows主机mysql忘记密码如何重置

本文主要是针对mysql重置密码过程中出现“mysqld不是内部命令或外部命令”的问题而写的.网上有很多关于mysql忘记密码了如何找回的文章,但是很多说的都不够详细,特别是还要用到DOS命令,可能这对于很大一部分刚接触这方面的朋友来说还是个难题.本文针对网上教程中有难点和疑惑的步骤进行再次剖析,如果能让你少走一步弯路,那我的目的也就达到了.下面是网上流传最多的方法,原作者无从知晓,这里表示感谢. 关闭正在运行的MySQL. 打开DOS窗口,转到mysqlbin目录. 输入mysqld --sk

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

1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. 2.参考别人的思路:发送邮件→请求邮件里的URL→验证url→{验证成功修改密码,不成功跳转到失败页面} 重点就是如何生成这个url和如何解析这个url. 需要注意的是一个url只能修改一次密码,当同一帐号发送多封邮件,只有最后一封邮件的url 3.加密能防止伪造攻击,一次url只能验证一次,

通过邮件找回密码

前言 本文将介绍忘记密码时通过发送重置密码邮件找回密码的实现思路.整个实现过程中最重要的就是以下三点: 如何发送邮件到用户指定邮箱 邮件中的重置密码链接构成是怎么样的 验证重置密码链接的合法性(是否过期) 先来个实现的效果展示吧,然后再仔细分析如何去实现各个部分: 效果展示 (这里盗用下我们小组作品成果的前端) 用户输入注册时的邮箱账户获取重置密码的链接 用户登录自己的邮箱查看邮件 用户点击重置密码链接,如果在重置链接有效期内我们跳转到重置密码界面,否则提醒用户该链接已过期 如何发送邮件给用户指

关于wordpress忘记密码 找回密码的方式

1.通过直接修改数据库中密码的加密字符(如果wordpress的版本不同,那么此方法是不好实现的) 2.使用找回密码的方式:通过邮箱找回密码 前端登录密码错误后 会显示   错误:[email protected]的密码不正确.忘记密码了? 点击忘记密码 --->输入数据库中user_mail字段的值也就是这个用户设置的邮箱地址,稍等即可收到此邮箱 提示: 再一些linux服务器中 会出现以下错误: 您的mail函数无法使用的问题 解决此问题的方式为: 一.适用于linux云服务器 描述:没有安

laravel5.5 自带的忘记密码邮箱找回功能小记

前沿: 看了半天登录注册,然后是这个忘记密码,有点头晕,只能说确实很菜. 1. 执行php artisan route:list 查看当前所有路由,可以发现点击忘记密码时候执行的是ForgotPasswordController控制器中的showLinkRequestForm方法,打开了对应视图. 2. 输入邮箱后点击发送邮件,执行的是ForgotPasswordController控制器中的sendResetLinkEmail方法, 控制器很干净,那方法应该是在引用的trait中了,打开Sen

转:java 帐号激活与忘记密码 实例

原文链接:http://endual.iteye.com/blog/1613679 一.帐户激活 在 很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段 简短的文字描述,如果用户没有去邮箱将帐户激活,可能在使用网站的某些功能时就会受到限制,比如不能发贴.下载资料.评论等限制.这么做的原因应该是为了 保证帐户的安全性和邮箱的有效性,以后网站如果有什么活动.资讯或系统安全通知等,可以在第一时间通知到用户.比

JavaMail学习笔记(七)、帐号激活与忘记密码 实例(zhuan)

一.帐户激活 在很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段简短的文字描述,如果用户没有去邮箱将帐户激活,可能在使用网站的某些功能时就会受到限制,比如不能发贴.下载资料.评论等限制.这么做的原因应该是为了保证帐户的安全性和邮箱的有效性,以后网站如果有什么活动.资讯或系统安全通知等,可以在第一时间通知到用户.比如我在奇艺视频网站注册一个帐号之后,它就会往我注册时填写的邮箱中发一封帐户激活的邮件,邮件

JavaMail学习笔记(七)、帐号激活与忘记密码 实例

http://blog.csdn.net/xyang81/article/details/7727141 一.帐户激活 在很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段简短的文字描述,如果用户没有去邮箱将帐户激活,可能在使用网站的某些功能时就会受到限制,比如不能发贴.下载资料.评论等限制.这么做的原因应该是为了保证帐户的安全性和邮箱的有效性,以后网站如果有什么活动.资讯或系统安全通知等,可以在第一时