SpringBoot+Mybatis-Plus实现邮箱验证注册

4 篇文章 1 订阅
1 篇文章 0 订阅

SpringBoot+Mybatis-Plus实现邮箱验证注册

一、概述

很多网站注册功能都会给您注册的邮箱发送一封邮件,里面是一串链接,点击链接激活功能 。

在注册的时候,User类中设置一个邮件码active_code,同时用户激活状态active_status默认为0(0 未激活 1 已激活)。邮件码可以通过UUID实现,这样在注册的时候发送一封邮件,把这个邮件码以html的格式发送到注册邮箱,然后通过点击链接,把邮件码在提交到后台进行对比,如果邮件中的邮件码跟发送时设置的一样,就把用户状态改为1激活,然后登陆即可。

二、邮箱服务设置

进入邮箱主页点击设置---->账户,往下滑动,找到画框的内容并开启,记住开启服务的授权码。

在这里插入图片描述

三、项目结构

在这里插入图片描述

四、项目代码
1.数据库表
SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `password` varchar(100) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `active_code` varchar(100) DEFAULT NULL,
  `active_status` int(11) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;
2.pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>email_demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>email_demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <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>

        <!--mail-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

        <!--Druid数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.18</version>
        </dependency>

        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3.配置文件

server:
  port: 8090
spring:
  # 邮箱配置
  mail:
    host: smtp.qq.com
    username: xxxxx@qq.com  #  发送邮件的邮箱
    password: gfvimwjfcmdticce #  授权码
    properties:
      mail:
        smtp:
          ssl:
            enable: true
  # thymeleaf
  thymeleaf:
    cache: false
    prefix: classpath:/templates/
    suffix: .html
  mvc:
    date-format: yyyy-MM-dd
  # mysql
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/mptest?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT&useSSL=false
    type: com.alibaba.druid.pool.DruidDataSource
    
4.User类
package com.example.email_demo.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;

import java.io.Serializable;

@Data
public class User implements Serializable {

    @TableId(type = IdType.AUTO)
    private int id;
    private String username;
    private String password;
    private String email;
    // 激活状态 0 未激活 1 已激活
    private Integer active_status;
    // 激活码
    private String active_code;

}

5.工具类tools的IDUtils
package com.example.email_demo.tools;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.UUID;

public class IDUtils {

    public static final Logger logger = LoggerFactory.getLogger(IDUtils.class);

    public static String getUUID(){
        return UUID.randomUUID().toString().replace("-","");
    }

    public static void main(String[] args) {

        System.out.println(getUUID());
        logger.debug("test");
    }

}

6.UserMapper
package com.example.email_demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.email_demo.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {

}

7.Service层

接口

UserService

package com.example.email_demo.service;

import com.example.email_demo.entity.User;


public interface UserService {

    /**
     *  用户注册
     * @param user
     */
    void insert(User user);

    /**
     *  根据激活码查找用户
     * @param activeCode
     * @return
     */
    User getUserByActiveCode(String activeCode);

    /**
     * 修改
     * @param user
     */
    void update(User user);

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

}

MailService

package com.example.email_demo.service;

public interface MailService {

    /**
     *  发送多媒体类型邮件
     * @param to
     * @param subject
     * @param content
     */
    void sendMimeMail(String to, String subject, String content);

    void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId);

}

实现类

UserServiceImpl

package com.example.email_demo.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.email_demo.entity.User;
import com.example.email_demo.mapper.UserMapper;
import com.example.email_demo.service.MailService;
import com.example.email_demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Autowired
    private MailService mailService;

    @Override
    public void insert(User user) {
        userMapper.insert(user);
        //获取激活码
        String code = user.getActive_code();
        //主题
        String subject = "来自混子社区的激活邮件";
        //上面的激活码发送到用户注册邮箱
        String context = "<a href=\"http://localhost:8090/checkCode?code="+code+"\">激活请点击:"+code+"</a>";
        //发送激活邮件
        mailService.sendMimeMail (user.getEmail(),subject,context);
    }

    @Override
    public User getUserByActiveCode(String activeCode) {
        return userMapper.selectOne(
                new QueryWrapper<User>().eq("active_code",activeCode)
        );
    }

    @Override
    public void update(User user) {
       userMapper.updateById(user);

    }

    @Override
    public User select(User user) {
       User select_user =  userMapper.selectOne(
                new QueryWrapper<User>()
                .eq("username",user.getUsername())
                .eq("password",user.getPassword())
                .eq("active_status",1)
        );

        return select_user;
    }
}

MailServiceImpl

package com.example.email_demo.service.impl;

import com.example.email_demo.service.MailService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@Service
public class MailServiceImpl implements MailService {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());


    @Autowired
    JavaMailSenderImpl mailSender;

    @Value("${spring.mail.username}")
    private String from;

    @Override
    public void sendMimeMail(String to, String subject, String content) {

        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = null;
        try {
            helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setSubject(subject);
            helper.setTo(to);
            helper.setText(content, true);
            mailSender.send(message);
            //日志信息
            logger.info("邮件已经发送。");
        } catch (MessagingException e) {
            logger.error("发送邮件时发生异常!", e);
        }


    }

    @Override
    public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId) {

        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = null;

        try{
            helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setSubject(subject);
            helper.setTo(to);
            helper.setText(content, true);

            FileSystemResource fs = new FileSystemResource(new File(rscPath));
            helper.addInline(rscId, fs);

            mailSender.send(message);
        }catch (MessagingException e) {
            logger.error("发送邮件时发生异常!", e);
        }

    }
}

8.Controller
package com.example.email_demo.controller;

import com.example.email_demo.entity.User;
import com.example.email_demo.service.UserService;
import com.example.email_demo.tools.IDUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/")
    public String index(){
        return "index";
    }

    /**
     *  注册
     * @param user
     * @return
     */
    @RequestMapping(value = "/register")
    public String register(User user){
        user.setActive_status(0);
        String activeCode = IDUtils.getUUID();
        user.setActive_code(activeCode);
        userService.insert(user);

        return "success";
    }

    /**
     *  校验激活码
     * @param code
     * @return
     */
    @RequestMapping(value = "/checkCode")
    public String checkCode(String code){
        User user = userService.getUserByActiveCode(code);
        //如果用户不等于null,把用户状态修改status=1
        if (user !=null){
            user.setActive_status(1);
            //把code验证码清空,已经不需要了
            user.setActive_code("");
            userService.update(user);

            return "activeSuccess";
        }

        return "login";
    }

    /**
     * 登录
     * @return login
     */
    @RequestMapping(value = "/loginPage")
    public String login(){
        return "login";
    }

    /**
     * 登录
     */
    @RequestMapping(value = "/login")
    public String login(User user){
        User u = userService.select(user);
        if (u !=null){
            return "welcome";
        }
        return "error";
    }

}

五、效果展示

在这里插入图片描述

点击注册后

在这里插入图片描述

在这里插入图片描述

点击链接后

在这里插入图片描述

点击登陆

在这里插入图片描述

想要的请点击源代码链接

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值