基于springboot的qq邮箱登录注册及找回密码(代码片段)

jiuqi_玖柒 jiuqi_玖柒     2023-01-28     755

关键词:

基于SpringBoot的登录注册及找回密码有关的邮箱验证码操作

底下附git链接

介绍

基于SpringBoot的登录注册及找回密码有关的邮箱验证码操作

1整体思路

注册

通过输入的邮箱发送验证码,检验输入的验证码是否和后台生成的一致,若一致,将用户数据写入数据库,完成注册;

登录

通过输入用户名和密码与数据库中一条数据进行对比,若一致,则登陆成功

找回密码

首先校验数据库中是否存在用户名及其密码,存在时,再调用发送验证码进行比对的方式进行修改密码

2整体的结构图

3准备工程

开始QQ邮箱POP3/SMTP服务

登录QQ邮箱后,点击左上方的设置,选择账户

然后一直往下滑,看到POP3/SMTP服务,点击开启,应该会让帮定的手机号发个短信,然后会收到一个授权码,一定要好好保存,在appliction.properties配置中会用到。

创建一个SpringBoot项目工程

pom.xml标签的全部依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.22</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

配置application.properties文件

server.port=8088
#邮箱配置
#平台地址,这里用的是qq邮箱,使用其他邮箱请更换
spring.mail.host = smtp.qq.com
#spring.mail.port=587
#改成自己的邮箱
spring.mail.username = XXXXXXXX@qq.com
#发送短信后它给你的授权码 填写到这里
spring.mail.password = XXXXXXXXXXXXXXXXX
#这东西不用改
spring.mail.properties.mail.smtp.ssl.enable=true
##编码格式
spring.mail.default-encoding=UTF-8

#数据库相关配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/email?useSSL=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456

#配置mapper
mybatis.mapper-locations=classpath:mapper/*.xml

创建数据库

CREATE DATABASE email;

CREATE TABLE `user` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

4全部代码类

包含义

controller包是和前端对接的

mapper包中是接口

pojo是实体类

service层是逻辑代码

vo包是前端发送数据暂时保存

执行流程

使用postman发送请求,controller中会接受,然后调用service中的逻辑代码,service会调用的mapper中接口,mapper的对应的xml实现对数据库的各种操作。

User.java

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User 
    private String username;
    private String password;
    private String email;

UserMapper.java

@Mapper
@Repository
public interface UserMapper 

    /**
     * 注册,插入数据
     * @param user
     */
    void insertUser(User user);

    /**
     * 根据邮箱查询
     * @param email
     * @return
     */
    User queryByEmail(String email);

    /**
     * 登录
     * @param user
     * @return
     */
    User selectUser(User user);

    /**
     * 检验username和email是否存在
     * @param user
     * @return
     */
    User selectUserByUsername(User user);

    void updateUser(User user);

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jiuqi.mapper.UserMapper">
    <insert id="insertUser" parameterType="com.jiuqi.pojo.User">
        insert into user (username,password,email)
         values (#username,#password,#email)
    </insert>

    <update id="updateUser">
        update user
        set password = #password
        where username = #username and email = #email
    </update>

    <select id="queryByEmail" resultType="com.jiuqi.pojo.User">
        select *
        from user
        where email = #email
    </select>
    <select id="selectUser" resultType="com.jiuqi.pojo.User">
        select *
        from user
        where username = #username and password = #password
    </select>

    <select id="selectUserByUsername" resultType="com.jiuqi.pojo.User">
        select *
        from user
        where username= #username and email = #email
    </select>
</mapper>

MailService.java

public interface MailService 

    /**
     * 给前端输入的邮箱,发送验证码
     *
     * @param email
     * @param session
     * @return
     */
    boolean sendMimeMail(String email, HttpSession session);

    /**
     * 随机生成6位数的验证码
     *
     * @return String code
     */
    String randomCode();

    /**
     * 检验验证码是否一致
     *
     * @param userVo
     * @param session
     * @return
     */
    boolean registered(UserVo userVo, HttpSession session);

    /**
     * 通过输入email查询password,然后比较两个password,如果一样,登录成功
     *
     * @param email
     * @param password
     * @return
     */
    boolean loginIn(String email, String password);

    /**
     * 登录
     * 检验用户名和密码
     *
     * @param user
     * @return
     */
    boolean login(User user);

    /**
     * 校验用户名和邮箱
     * @param user
     * @return
     */
    String selectUserByUsername(User user);

    /**
     * 通过邮箱找回密码
     * @param email
     * @param session
     * @return
     */
    boolean sendMimeMail2(String email, HttpSession session);

    /**
     * 校验验证码并重置更改密码
     * @param userVo
     * @param session
     * @return
     */
    boolean updateUser(UserVo userVo, HttpSession session);

MailServiceImpl.java

@Service
public class MailServiceImpl implements MailService 
    @Autowired
    private JavaMailSender mailSender;

    @Autowired
    private UserMapper userMapper;

    //application.properties中已配置的值
    @Value("$spring.mail.username")
    private String from;

    /**
     * 发送邮箱
     *
     * @param email
     * @param session
     * @return
     */
    @Override
    public boolean sendMimeMail(String email, HttpSession session) 
        try 
            //邮箱信息
            SimpleMailMessage mailMessage = new SimpleMailMessage();

            //主题
            mailMessage.setSubject("lr_email注册");

            //生成随机数
            String code = randomCode();

            System.out.println("code = " + code);

            //将随机数放置到session中
            session.setAttribute("email", email);
            session.setAttribute("code", code);

            //内容
            mailMessage.setText("lr_email注册的验证码是:" + code);

            //发给谁
            mailMessage.setTo(email);

            //你自己的邮箱
            mailMessage.setFrom(from);

            //发送
            mailSender.send(mailMessage);

            return true;
         catch (Exception e) 
            e.printStackTrace();
            return false;
        
    

    /**
     * 6位数验证码
     *
     * @return
     */
    @Override
    public String randomCode() 
        StringBuilder str = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < 6; i++) 
            str.append(random.nextInt(10));
        
        return str.toString();
    

    /**
     * 检验验证码是否一致
     *
     * @param userVo
     * @param session
     * @return
     */
    @Override
    public boolean registered(UserVo userVo, HttpSession session) 
        //获取session中的验证信息
        String email = (String) session.getAttribute("email");
        String code = (String) session.getAttribute("code");

        //获取表单中的提交的验证信息
        String voCode = userVo.getCode();

        //如果email数据为空,或者不一致,注册失败
        if (email == null || email.isEmpty()) 
            return false;
         else if (!voCode.equals(code)) 
            return false;
        

        //保存数据
        User user = UserVoToUser.toUser(userVo);

        //将数据写入数据库
        userMapper.insertUser(user);

        //跳转成功页面
        return true;
    

    /**
     * 登录
     *
     * @param user
     * @return
     */
    @Override
    public boolean login(User user) 
        return userMapper.selectUser(user) != null ? true : false;
    

    /**
     * 判断用户和邮箱是否存在
     *
     * @param user
     * @return
     */
    @Override
    public String selectUserByUsername(User user) 
        User user1 = userMapper.selectUserByUsername(user);
        System.out.println(user1);
        return user1 != null ? "SUCCESS" : "ERROR";
    

    @Override
    public boolean sendMimeMail2(String email, HttpSession session) 
        try 
            //邮箱信息
            SimpleMailMessage mailMessage = new SimpleMailMessage();

            //主题
            mailMessage.setSubject("lr_email找回密码");

            //生成随机数
            String code = randomCode();

            System.out.println("code = " + code);

            //将随机数放置到session中
            session.setAttribute("email", email);
            session.setAttribute("code", code);

            //内容
            mailMessage.setText("lr_email找回密码的验证码是:" + code);

            //发给谁
            mailMessage.setTo(email);

            //你自己的邮箱
            mailMessage.setFrom(from);

            //发送
            mailSender.send(mailMessage);

            return true;
         catch (Exception e) 
            e.printStackTrace();
            return false;
        
    

    @Override
    public boolean updateUser(UserVo userVo, HttpSession session) 
        //获取session中的验证信息
        String email = (String) session.getAttribute("email");
        String code = (String) session.getAttribute("code");

        //获取表单中的提交的验证信息
        String voCode = userVo.getCode();

        //如果email数据为空,或者不一致,注册失败
        if (email == null || email.isEmpty()) 
            return false;
         else if (!voCode.equals(code)) 
            return false;
        

        //保存数据
        User user = UserVoToUser.toUser(userVo);

        //将数据写入数据库
        userMapper.updateUser(user);

        //跳转成功页面
        return true;
    

UserController.java

@Controller
public class UserController 

    @Autowired
    private MailService mailService;

    @RequestMapping("/", "/index")
    public String index() 
        return "login";
    

    @RequestMapping("/toReg")
    public String toReg() 
        return "register";
    

    @RequestMapping("/toPass")
    public String toPass() 
        return "password";
    

    /**
     * 发送注册验证码
     * @param email
     * @param httpSession
     * @return
     */
    @PostMapping("/sendEmail/email")
    @ResponseBody
    public String sendEmail(@PathVariable String email, HttpSession httpSession) 
        boolean flag = mailService.sendMimeMail(email, httpSession);
        return flag ? "success" : "false";
    

    /**
     * 注册
     * @param userVo
     * @param session
     * @return
     */
    @PostMapping("/register")
    @ResponseBody
    public String register(UserVo userVo, HttpSession session) 
        boolean flag = mailService.registered(userVo, session);
        session.removeAttribute("code");
        return flag ? "success" : "false";
    

    @PostMapping("/login")
    public String login(User user) 
        boolean flag = mailService.login(user);
        return flag ? "success" : "false";
    


    @PostMapping("/verify")
    @ResponseBody
    public String verify(User user) 

        return mailService.selectUserByUsername(user);
    


    /**
     * 发送找回密码验证码
     * @param email
     * @param httpSession
     * @return
     */
    @PostMapping("/sendEmail2/email")
    @ResponseBody
    public String sendEmail2(@PathVariable String email, HttpSession httpSession) 
        springboot|邮箱发送验证码,你会了吗?(代码片段)

...ff0c;一般会和QQ邮箱关联)。现在咱们来介绍一下它在SpringBoot项目中的具体应用。🦁提前准备2.1配置邮箱第三方登录在系统中使用到的邮箱发送邮件属于第三方登录,需要登录QQ邮箱配置第三方登录。2.1.1点击设置—... 查看详情

ciscopackettracer_signup(基于临时邮箱/qq邮箱注册并成功在软件中登录)(2021.9实践)(应对sorry,wecan‘tfindanetacad...)(代(代码片段)

文章目录前情提要(optional1)可以直接使用国内的邮箱可以注册NetWorkingAcdemy账号(optional2)如果您想要保护号隐私,可以选择使用临时邮箱进行注册tmpMail:申请临时邮箱正式开始注册(enrollyouraccountformally)enrollnetacadaaccounttheactivelinkmailsendb... 查看详情

springboot轻轻松松搞定用户邮箱登录注册(代码片段)

文章目录前言效果演示注册效果登录环境准备邮箱准备相关工具类验证码工具类日期工具类Redis工具类专门用来管理key的类JWT的封装密码加密比对接口与实体接口实体信息枚举类统一异常处理登录流程前端后端密码比对防刷完整... 查看详情

springboot轻轻松松搞定用户邮箱登录注册(代码片段)

文章目录前言效果演示注册效果登录环境准备邮箱准备相关工具类验证码工具类日期工具类Redis工具类专门用来管理key的类JWT的封装密码加密比对接口与实体接口实体信息枚举类统一异常处理登录流程前端后端密码比对防刷完整... 查看详情

springboot轻轻松松搞定用户邮箱登录注册(代码片段)

文章目录前言效果演示注册效果登录环境准备邮箱准备相关工具类验证码工具类日期工具类Redis工具类专门用来管理key的类JWT的封装密码加密比对接口与实体接口实体信息枚举类统一异常处理登录流程前端后端密码比对防刷完整... 查看详情

springboot轻轻松松搞定用户邮箱登录注册(代码片段)

文章目录前言效果演示注册效果登录环境准备邮箱准备相关工具类验证码工具类日期工具类Redis工具类专门用来管理key的类JWT的封装密码加密比对接口与实体接口实体信息枚举类统一异常处理登录流程前端后端密码比对防刷完整... 查看详情

springboot整合redis之发送手机验证码注册登录

springboot项目使用阿里云短信服务发送手机验证码-----(第二篇)此文介绍:springboot整合redis之发送手机验证码注册登录短信验证码是通过发送验证码到手机的一种有效的验证码系统。主要用于验证用户手机的合法性及敏感操作的... 查看详情

outlook邮箱怎么查看自己的邮箱号

...己的域名mail账号或者给别人发邮件内容会显示发件人的邮箱。如果进入不了,点击打开msn中文网找到outlook邮箱登录页面窗口,如下图点击“无法访问你的账号”连接进入microsoft账号申诉申请地址,如下图。点击“忘记密码”选... 查看详情

springboot注册登录:注册--验证账号密码是否符合格式及后台完成注册功能

SpringBoot注册登录(一):User表的设计点击打开链接SpringBoot注册登录(二):注册---验证码kaptcha的实现点击打开链接     SpringBoot注册登录(三):注册--验证账号密码是否符合格式及后台完成注册功能点击打开链接 ... 查看详情

qq邮箱打开imap开启时验证密出不来怎么办?

登录邮箱重新设置看看:1、登录到QQ邮箱首页,找到设置选项,如图2.再点击【设置】功能选项,默认跳转到【常规】设置页面,如图3.切换到【账户】设置页面,下拉到页面中间部分,可以看到IMAP、POP3等服务设置功能,如图4.... 查看详情

git配置免密登录及常用操作的详细教程(基于gitee平台)(代码片段)

(文章目录)前言我这里使用的是vuecli创建的项目进行代码管理,使用的平台是Gitee。平台的话其实最推荐使用的平台还是GitHub(但是因为国内连接不稳定的原因放弃使用),因为GitHub有个功能可以直接将你的项目在仓库中跑起来... 查看详情

简述邮箱找回密码功能

1.在登录页面给个链接,在找回密码界面可以输入邮箱地址和验证码,验证码是为了防止恶意找回;2.后台,首先判断验证码是否正确,再判断该邮箱是否注册过用户;3.如果该邮箱存在,检索出该用户信息;4.如果你的密码没有MD5... 查看详情

密保邮箱手机怎么登陆

可以用两种方法登录邮箱,不只是密保邮箱,所有邮箱都是这样:使用手机浏览器,登录网页版邮箱,通常网页邮箱都会有触屏版,比如QQ邮箱,163邮箱,139邮箱,这种方法是不需要特殊设置的使用邮箱软件登录,不如手机自带... 查看详情

springboot使用qq邮箱发送邮件

...邮箱注册和重置密码的功能,因为之前就做过,但是不是Springboot项目,所以相对来说还是比较容易的,在这里记录一下。  一、引用Maven依赖这里使用spring自带的邮件jar包<!--邮件服务--><dependency><groupId>org.springfram... 查看详情

重学springboot系列之邮件发送的整合与使用(代码片段)

重学Springboot系列之邮件发送的整合与使用基础协议及邮件配置整合名词概念解释整合邮件发送功能引入依赖邮箱配置发送简单邮件附录:QQ邮箱发邮件设置发送html和基于模板的邮件发送html邮件服务基于freemarker模板的邮件发... 查看详情

杜鹃加速器的软件界面及功能介绍

参考技术A1.登录界面登录界面是使用杜鹃的入口,已注册用户输入用户名、密码后点击【登录】按钮即可以登录;没有注册的用户可以点击【免费注册】,软件会自动打开杜鹃网站注册页面供用户注册;忘记密码的用户也可以点... 查看详情

kali物理机笔记本怎么连接到自己的wifi

...:怎样找回qq密码?  进入到密码找回的页面  1、在登录QQ的时候,发现输入的密码错误,或者压根就是忘记了,如图所示将会提示密码错误的信息框。  2、遇到这样的情况时,通过点击登陆窗口旁边的“找回密码”或是... 查看详情

163电子邮箱,注册登陆及使用详细揭秘

163电子邮箱,和我们工作生活息息相关。那么对于最近颇受关注的TOM-VIP邮箱,小编来帮忙揭秘其在注册、登陆及使用方面小技能分享给各位~首先:163.net邮箱多种登陆入口包括1)Web端注册登录(Web端注册登录,任意端电脑登陆... 查看详情