博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
忘记密码 通过邮件找回
阅读量:4984 次
发布时间:2019-06-12

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

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

@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", "p@ssw@rd");                    // 是否需要验证                    mail.setTLS(true);                    mail.setCharset("UTF-8");                                        try {                    // 发件人                         mail.setFrom("kaishengit@126.com");                        // 主题                        mail.setSubject("密码找回邮件");                        // 内容                         mail.setHtmlMsg("点击此链接找回密码:重置密码");                        mail.addTo(email);                        mail.send();                                            } catch (EmailException e) {                        e.printStackTrace();                    }                }            });                        thread.start();        }            }

 

// 缓存写成工具类 import java.io.IOException; import net.spy.memcached.AddrUtil; import net.spy.memcached.MemcachedClient; 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;            }        }    }

 

转载于:https://www.cnblogs.com/itliucheng/p/4377205.html

你可能感兴趣的文章
django连接mongodb mongoengine
查看>>
转载:主要几种通信协议的性能比较
查看>>
以古为新 洒脱自然 ——魏沁的书法艺术
查看>>
笔记故事(2)
查看>>
hibernate外键维护
查看>>
TCP三次握手与四次分手
查看>>
[leetcode] Binary Tree Pruning
查看>>
简单几步实现返回顶部效果
查看>>
[树莓派]启用root账户
查看>>
servlet web.xml配置详解
查看>>
CI框架用cookie实现用户自动登录
查看>>
Sql Server 增加字段、修改字段、修改类型、修改默认值(转)
查看>>
日期操作类--Calendar类
查看>>
能源项目xml文件标签释义--<mvc:annotation-driven>
查看>>
unity3d连接Sqlite并打包发布Android
查看>>
spoj839: Optimal Marks
查看>>
2 主要设计思路
查看>>
Wince实现软件开机自启动
查看>>
【BZOJ1106】【POI2007】立方体大作战tet(树状数组+贪心)
查看>>
CGridCtrl在MFC中的使用(一)
查看>>