后端业务之忘记密码功能

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

关于项目使用邮箱忘记密码的功能

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

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

 <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
  </dependency>

在这里插入图片描述

MailSender

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

/**
 * qq邮箱配置类
 */
@Configuration
public class MailConfig {

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

    /**
     * 配置MailSender
     * MailSender是一个接口,其一个实现类为JavaMailSenderImpl
     * @return
     */
    @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邮箱界面,按如下操作获取授权码:

image-20220523193439024

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

SimpleMailMessage

另一个核心类:SimpleMailMessage:

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

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

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

public class MailUtil {

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

    /**
     * 发送邮件的方法,传入的参数 邮件发送器,目标邮箱,关键验证码信息
     * @param mailSender
     * @param toEmail
     * @param code
     */
    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中存在对应的验证码并检验是否相等,若相等,前端则弹出修改密码的窗口,之后后端将密码密文加密后保存到数据库。
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值