栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

后端业务之忘记密码功能

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

后端业务之忘记密码功能

本文讲解是基于前后端分离项目

关于项目使用邮箱忘记密码的功能
  1. 前端需要设计一个页面,点击找回密码,跳转到找回密码界面。
  2. 找回密码界面有三个数据项:邮箱号(当然也可以是手机号,不过本篇文章主要研究邮箱的方式)、验证码。
  3. 用户输入邮箱,点击发送验证码。此时前端调用后端的接口(数据部分会带上邮箱号)
  4. 后端接收到邮箱,会先在数据库查找该邮箱号是否存在。如果不存在,则返回前端一些可读的错误信息。如果查询到邮箱对应有存在用户,则可以执行向该邮箱发送验证码的功能。
  5. 想要通过Java向指定的邮箱发送验证码,首先我们能要了解两个核心类

首先需要引入pom依赖:
这里其实就是spring的context包,只要有这个包就可以进行邮件的传输了:

 
            javax.mail
            mail
            1.4.7
  

MailSender

​ MailSender:邮件发送器,主要功能是指定邮箱主机名、SMTP端口、发送方的qq邮箱和授权码,我们可以定义一个配置类,使用@Bean的方式配置相关信息

@Configuration
public class MailConfig {

        private static final String USERNAME="211213@qq.com";  // 指定发送邮件的账户
    private static final String PASSWORD="dAWEDWEFWEFED";  //指定发送邮箱的授权码

    
    @Bean
    public MailSender mailSender(){
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.qq.com");  //指定用来发送邮件服务器的主机名
        mailSender.setPort(587);    //默认端口,标准的SMTP端口
        mailSender.setUsername(USERNAME);  //配置自己的qq邮箱
        mailSender.setPassword(PASSWORD);   //配置自己的qq邮箱发送授权码
        return mailSender;
    }

}

这里需要配置password即授权码,下面介绍授权码的获取方式

获取qq邮箱授权码

这里我们又遇到了一个核心数据,授权码,我们使用的是qq邮箱,所以进入qq邮箱界面,按如下操作获取授权码:

点击了步骤2后会自动弹出获取授权码功能,如下成功获取授权码:

SimpleMailMessage

另一个核心类:SimpleMailMessage:

发送器配置了过后,我们就可以指定要发送的消息了。

这里一个重要的消息类为SimpleMailMessage,它主要用来封装邮件的相关信息,通过set方法指定要发送的信息。

我们可以创建一个MailUtil,专门用来发送消息:

public class MailUtil {

    //注意这里一定要和Mail配置中的邮箱对应,不然无法成功发送
    public static final String FROM_EMAIL="2234234234@qq.com";

    
    public static void sendMessageToMail(MailSender mailSender,String toEmail, String code){
        SimpleMailMessage message = new SimpleMailMessage();        //消息体构造器
        message.setFrom(FROM_EMAIL);                        //发件人
        message.setTo(toEmail);                                       //收件人
        message.setSubject("某某网站-用户找回密码");         //主题
        message.setText("您本次的验证码是:" +code);            //正文内容
        mailSender.send(message);
        System.out.println(code);
    }
}

生成六位随机数字字符串

另外再提一嘴,code验证码通常是6位数字,这里我在提供一个用于生成6为数字的字符串方法:

	
    public static String getSixRandom(){
        Random random = new Random();
        String result = "";
        for(int i = 0;i<6;i++){
            result+=random.nextInt(10);
        }
        return result;
    }

后端需要向指定邮箱发送验证码,并将此一验证码通过用户Id为键的方式存进redis中,下次验证验证码是否正确会用到。

  1. 前端接受到邮箱发送过来的验证码,填入后点击确定,调用后端接口。后端验证指定的id是否再redis中存在对应的验证码并检验是否相等,若相等,前端则弹出修改密码的窗口,之后后端将密码密文加密后保存到数据库。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/927149.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号