Springboot实现发送邮件及注册激活步骤

在上一篇文章中,我们使用springboot整合邮件实现发送功能,那么下面来用邮件发送功能实现用户注册,方便我们进一步熟悉邮件发送功能的使用。实现步骤大致如下:进行用户注册同时发送一封激活邮件,邮件里面包含一条激活链接,点击链接把使用UUIDUtils生产发送给用户的邮箱验证码提交进行验证,从而修改用户的激活状态,最后返回登陆页面进行验证登录。

一.效果演示

输入邮箱等一系列信息,点击注册,系统自动发送激活邮件到你绑定的邮箱地址。同时数据库里面增加一条用户信息,其中用户状态(status)默认值为0,需要进行激活改变状态才能授权登录。

如下,打开自己绑定的邮箱点击下面的激活链接,激活成功后跳转到登录页面

点击邮件激活链接的时候,验证链接中的激活码与数据库的code值是否一致,若验证成功则清除数据库中code的值,同时改变用户状态(即status的值由0变为1)。

二.编程实现步骤

1.实现邮件发送服务

如何实现邮件发送服务,可以参考我之前相关的文章:Springboot整合实现邮件发送

2.封装实体类

使用注解的方式快速创建User实体类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
​
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int UserID;
    //账号
    private String UserNumber;
    //密码
    private String Password;
    //邮箱地址
    private String Email;
    /**
     * 状态:0代表未激活,1代表激活
     */
    private Integer status;
    /**
     * 利用UUID生成一段数字,发动到用户邮箱,当用户点击链接时
     * 在做一个校验如果用户传来的code跟我们发生的code一致,更改状态为“1”来激活用户
     */
    private String  code;
}

3.创建生成UUID的工具类

UUID产生的目的是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。UUID 来作为数据库中字段是非常不错的选择,保证每次生成的UUID 是唯一的

import java.util.UUID;
/**
 * @Description:使用UUIDUtils生产发送给用户的邮箱验证码
 */
public class UUIDUtils {
    public static String getUUID(){
        return UUID.randomUUID().toString().replace("-","");
    }
}

4.创建Userdao接口

package com.kuang.Dao;
import com.kuang.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
​
//@Mapper : 表示本类是一个 MyBatis 的 Mapper
@Mapper
@Repository
public interface UsersDao {
    //登录
    public User login(@Param("UserNumber") String UserNumber, @Param("Password") String Password);
    //找回密码
    public User retrieve(@Param("Email") String Email);
    /**
     * 用户注册
     * @param user
     */
    void register(User user);
    /**
     * 根据激活码查询用户,之后再进行修改用户状态
     * @param code
     * @return
     */
    User checkCode(String code);
    /**
     * 激活账户,修改用户状态为"1"
     * @param user
     */
    void updateUserStatus(User user);
}

5.创建映射文件UserMapper.xml

注意:在mybatis中映射文件中的namespace是用于绑定Dao接口的,即面向接口编程,dao接口的方法对应mapper中的sql语名。

<?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.kuang.Dao.UsersDao">
    <resultMap type="com.kuang.pojo.User" id="User">
        <id column="UserID" property="UserID"/>
        <result column="UserID" property="UserID"/>
        <result column="UserNumber" property="UserNumber"/>
        <result column="Password" property="Password"/>
        <result column="Email" property="Email"/>
        <result column="code" property="code"/>
        <result column="status" property="status"/>
    </resultMap>
​
    <select id="login" resultMap="User">
        select * from user where UserNumber=#{UserNumber} and Password=#{Password} and status=1
    </select>
​
    <select id="retrieve" resultMap="User">
        select * from user where Email=#{Email}
    </select>
​
    <!--注册用户-->
    <insert id="register" parameterType="User" >
        insert into user ( UserNumber, Password,Email,status,code)
        values (#{UserNumber,jdbcType=VARCHAR}, #{Password,jdbcType=VARCHAR}, #{Email,jdbcType=VARCHAR},
                #{status,jdbcType=INTEGER},#{code,jdbcType=INTEGER})
    </insert>
​
    <!--根据激活码code查询用户-->
    <select id="checkCode" parameterType="String" resultType="User">
        select * from user where code = #[code]
    </select>
​
    <!--激活账户,修改用户状态-->
    <update id="updateUserStatus" parameterType="User">
        update user set status=1,code=null where UserID=#{UserID}
    </update>
</mapper>

6.创建UserService接口

package com.kuang.service;
import com.kuang.pojo.User;
​
public interface UserService {
​
    //用户登录
    public User login(String userName, String password);
    //找回密码
    public User retrieve(String email);
    /**
     * 用户注册
     * @param user
     */
    void register(User user);
    /**
     * 根据激活码code查询用户,之后再进行修改状态
     * @param code
     * @return
     */
    User checkCode(String code);
    /**
     * 激活账户,修改用户状态
     * @param user
     */
    void updateUserStatus(User user);
}

7.创建UserServiceImpl实现类

注意:这里使用到的sendHtmlMail发送邮件方法,在相关的文章:Springboot整合实现邮件发送

package com.kuang.service.impl;
​
import com.kuang.Dao.UsersDao;
import com.kuang.pojo.User;
import com.kuang.service.MailService;
import com.kuang.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
​
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UsersDao usersDao;
    @Autowired
    private MailService mailService;
     /**
     * 登录验证
     */
    @Override
    public User login(String userName, String password){
        return usersDao.login(userName,password);
    }
     /**
     * 忘记密码,邮件发送找回
     */
    @Override
    public User retrieve(String email){
        return usersDao.retrieve(email);
    }
    /**
     * 用户注册,同时发送一封激活邮件
     * @param user
     */
    @Override
    public void register(User user) {
        usersDao.register(user);
        String code = user.getCode();
        System.out.println("code:"+code);
        String subject = "来自智能化驾校管理系统的激活邮件";
        ///checkCode?code=xxx即是我们点击邮件链接之后进行更改状态的
        String context = "<h1>此邮件为官方激活邮件!请点击下面链接完成激活操作!</h1> <a href=\"http://localhost:8080/selectCode?code="+code+"\">激活请点击:"+code+"</a> ";
        //发送激活邮件
        mailService.sendHtmlMail (user.getEmail(),subject,context);
    }
    /**
     * 根据激活码code进行查询用户,之后再进行修改状态
     * @param code
     * @return
     */
    @Override
    public User checkCode(String code) {
​
        return usersDao.checkCode(code);
    }
    /**
     * 激活账户,修改用户状态
     * @param user
     */
    @Override
    public void updateUserStatus(User user) {
        usersDao.updateUserStatus(user);
    }
}

8.定义核心业务接口UserController控制类

package com.kuang.contorller;
​
import com.kuang.common.UUIDUtils;
import com.kuang.pojo.User;
import com.kuang.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.thymeleaf.util.StringUtils;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
​
@Controller
public class LoginContorller {
​
    @Resource
    private UserService userService;
​
    @RequestMapping("/main")
    public String login(@RequestParam("UserNumber") String UserNumber,
                        @RequestParam("Password") String Password, Model model, HttpSession session) {
​
        //具体的业务
        User user= userService.login(UserNumber,Password);
        if (user!=null){
            session.setAttribute("loginUser",UserNumber);
            return "redirect:/Main";
        }else if(StringUtils.isEmpty(UserNumber) && StringUtils.isEmpty(Password)){
            model.addAttribute("msg","账号或者密码不能为空");
            return "Login";
        }
        else {
            model.addAttribute("msg","账号或者密码错误");
            return "Login";
        }
    }
    /**
     * 注册
     * @param user
     * @return
     */
    @RequestMapping(value = "/registerUser")
    public String register(User user){
        user.setStatus(0);
        String code = UUIDUtils.getUUID()+ UUIDUtils.getUUID();
        user.setCode(code);
        userService.register(user);
        return "login";
    }
    /**
     *校验邮箱中的code激活账户
     * 首先根据激活码code查询用户,之后再把状态修改为"1"
     */
    @RequestMapping(value = "/selectCode")
    public String checkCode(String code){
        User user = userService.checkCode(code);
        System.out.println(user);
        //如果用户不等于null,把用户状态修改status=1
        if (user !=null){
            user.setStatus(1);
            //把code验证码清空,已经不需要了
            user.setCode("");
            System.out.println(user);
            userService.updateUserStatus(user);
        }
        return "login";
    }
    /**
     * 跳转到登录页面
     * @return login
     */
    @RequestMapping(value = "/loginPage")
    public String login(){
        return "login";
    }
}

9.编写页面内容

在我们的项目开发过程中我们需要向后端发送请求,实现前后端的数据交互,这里使用了Thymeleaf模板引擎+form的方法。后台按照post的地址进行接收即可,需要注意的是,提交数据的时候,button或者input都设置成为submit

<div id="signup-box" class="signup-box widget-box no-border">
     <div class="widget-body">
         <div class="widget-main">
             <h4 class="header green lighter bigger">
                 <i class="icon-group blue"></i>
                 <span id="beatText1">注册新用户</span>
             </h4>
​
             <div class="space-6"></div>
             <p> 请输入你的信息: </p>
​
             <form th:action="@{/registerUser}" method="post">
                 <fieldset>
                     <label>
                         <span class="block input-icon input-icon-right">
                        <input type="email" class="span12" id="ZCEmail" name="Email" placeholder="邮箱"/>
                             <i class="icon-envelope"></i>
                         </span>
                     </label>
​
                     <label>
                         <span class="block input-icon input-icon-right">
                <input type="text" class="span12" id="ZCUserNumber" name="UserNumber" placeholder="账号"/>
                             <i class="icon-user"></i>
                         </span>
                     </label>
​
                     <label>
                         <span class="block input-icon input-icon-right">
                 <input type="password" class="span12" id="ZCPassword" name="Password" placeholder="密码"/>
                             <i class="icon-lock"></i>
                         </span>
                     </label>
​
                     <label>
                         <span class="block input-icon input-icon-right">
                             <input type="password" class="span12" placeholder="确认密码"/>
                             <i class="icon-retweet"></i>
                         </span>
                     </label>
​
                     <label>
                         <input type="checkbox"/>
                         <span class="lbl">
                             我接受本
                             <a href="#" rel="external nofollow"  rel="external nofollow" >用户协议</a>
                         </span>
                     </label>
​
                     <div class="space-24"></div>
​
                     <div class="clearfix">
                         <button type="reset" class="width-30 pull-left btn btn-small">
                             <i class="icon-refresh"></i>
                             重置
                         </button>
​
                         <button type="submit" class="width-65 pull-right btn btn-small btn-success">
                             注册
                             <i class="icon-arrow-right icon-on-right"></i>
                         </button>
                     </div>
                 </fieldset>
             </form>
         </div>
​
         <div class="toolbar center">
             <a href="#" rel="external nofollow"  rel="external nofollow"  onclick="show_box('login-box'); return false;"
                class="back-to-login-link">
                 <i class="icon-arrow-left"></i>
                 返回登陆
             </a>
         </div>

10.完整的项目部署

总结:使用Springboot实现发送邮件注册激活的步骤大致如此,需要更加完整的项目逻辑可以自己完善

到此这篇关于Springboot实现发送邮件及注册激活步骤的文章就介绍到这了,更多相关Springboot发送邮件注册激活内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot实现发送邮件功能

    背景 有个小伙伴问我你以前发邮件功能怎么弄的.然后我就给他找了个demo,正好在此也写一下,分享给大家. 理清痛点 发送邮件,大家可以想一下,坑的地方在哪? 我觉得是三个吧. 第一:邮件白名单问题. 第二:邮件超时问题. 第三:邮件带附件问题. 我下面的demo都会介绍这些问题及解决. 实现方案 准备工作 我们先要准备一个可以发送的邮箱,我这里以我的163邮箱为例,现在发送邮件的规则,要求你输入一种叫做授权码的东西,注意这个东西不是密码. 获取授权码的步骤: 当选择开启,通过验证之后就可以获取到

  • SpringBoot JavaMailSender发送邮件功能

    本文实例为大家分享了SpringBoot JavaMailSender发送邮件的具体代码,供大家参考,具体内容如下 引入Maven依赖包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 163邮箱 application.properties

  • SpringBoot实现发送邮件功能过程图解

    首先创建一个邮箱账号,建议@126.com,@163.com,@qq.com 都可以 开启smtp,以下是使用图解: 创建SpringBoot项目导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 支持发送邮件 -->

  • 基于SpringBoot实现定时发送邮件过程解析

    前提: 1.Springboot项目 2.引入maven 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 以下代码中涉及到的maven依赖有日志依赖,但是springboot都有集成,不用重新引入依赖 Application(程序入口)

  • SpringBoot使用FreeMarker模板发送邮件

    本文实例为大家分享了SpringBoot +Mail+FreeMarker发送邮件,供大家参考,具体内容如下 通过spirngboot 自带的mail服务及FreeMarker模板引擎,发送邮 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </depen

  • SpringBoot整合JavaMail通过阿里云企业邮箱发送邮件的实现

    JavaMail是Java开发中邮件处理的开源类库,支持常用协议如:SMTP.POP3.IMAP 一.SpringBoot整合 1.需要在pom文件中添加依赖spring-boot-starter-mail <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependenc

  • Springboot实现发送邮件及注册激活步骤

    在上一篇文章中,我们使用springboot整合邮件实现发送功能,那么下面来用邮件发送功能实现用户注册,方便我们进一步熟悉邮件发送功能的使用.实现步骤大致如下:进行用户注册同时发送一封激活邮件,邮件里面包含一条激活链接,点击链接把使用UUIDUtils生产发送给用户的邮箱验证码提交进行验证,从而修改用户的激活状态,最后返回登陆页面进行验证登录. 一.效果演示 输入邮箱等一系列信息,点击注册,系统自动发送激活邮件到你绑定的邮箱地址.同时数据库里面增加一条用户信息,其中用户状态(status)默认值

  • javamail实现注册激活邮件

    本文实例为大家分享了javamail注册激活邮件的具体代码,供大家参考,具体内容如下 需要的jar包 1.MySQL驱动包 2.mail.jar包 SMTP和POP3协议概述 SMTP协议称为简单邮件传输协议,是一组用于从原地址到目的地址传送邮件的规则,由它来控制信件的中转方式.SMTP协议属于TCP/IP的协议簇,SMTP是负责邮件服务器之间的寄信的通信协定 POP3协议称为邮局协议版本3,也是TCP/IP协议簇的一员,基于POP3协议的服务器是用来接收信件的.每个Email地址一般只有一个如

  • Navicat for MySQL 15注册激活详细教程

    1.下载Navicat for MySQL 15 https://www.navicat.com.cn/download/navicat-for-mysql 2.下载激活工具 链接: https://pan.baidu.com/s/1BtEADEk3_3oKc1ic7IHhiQ   提取码: haqj 3.安装Mavicat,按步骤安装即可,安装完毕后先不要打开软件,断开网络连接,将激活工具复制到Navicat安装路径下,以管理员身份运行. 在弹出界面选择Navicat 15 Products选

  • SpringBoot+Mybatis实现登录注册的示例代码

    学习SpringBoot+Mybatis实现的登录注册功能的Demo,实现这个Demo在网上也参考了资料和代码,本文是本人在实现Demo后的个人总结,以便理清思路. 1.环境 jdk8 : "1.8.0_281" Maven: 3.6.3 Idea:2020.2 Mysql:5.6.40 Navicat:10.1.7 2.步骤 2.1 创建一个SpringBoot项目 选择依赖如下: Web下的Spring Web. Template Engines下的Thymeleaf. SQL下的

  • SpringBoot启动嵌入式Tomcat的实现步骤

    目录 Spring Boot中Web容器相关接口 WebServer ServletWebServerFactory WebServerFactoryCustomizerBeanPostProcessor 创建.启动嵌入式Web容器 createWebServer getWebServer 注册Servlet Servlet注解 ServletRegistrationBean 动态注册 定制Web容器 ConfigurableServletWebServerFactory TomcatServl

  • Springboot实现发送邮件

    本文实例为大家分享了Springboot实现发送邮件功能的具体代码,供大家参考,具体内容如下 第一章 背景介绍 1.1 使用场景 1.注册验证: 2.网站营销: 3.安全的最后一道防线: 4.提醒.监控警告: 5.触发机制. 1.2 邮件发送原理 1.邮件传输协议:SMTP协议和POP3协议 2.内容不断发展:IMAP和Mme协议 1.3 邮件发送流程 第二章 使用SpringBoot完成邮件发送 2.1 开发流程 2.2 开发简单文本邮件 2.2.1 引入相关jar包 在pom.xml中添加依

  • Springboot实现邮箱验证码注册与修改密码及登录功能详解流程

    目录 前言 一.SpringBoot依赖 1.pom.xml文件 2.Applications.yaml 二.数据库文件 三.实现注册功能 四.找回密码功能 五.登录功能 总结 前言 最近Springboot课程要求登录.注册.找回密码功能,可以自行添加一些额外的功能,这里也是记录一下做好的思路和代码. 一.SpringBoot依赖 1.pom.xml文件 Maven版本号:3.5.4 登录.注册.找回密码,需要用到邮箱验证码,要引入mail依赖,实现三分钟需要使用到redis,要引入redis

  • 详解springboot中的jar包部署步骤

    eclipse中: 1.单击整个项目 run as - maven clean - maven install 2.找到项目所在的路径 找到所有的jar包 3.把jar包放到linux对应的文件夹 linux中部署项目: 1.查看jar是否在运行中 ps -ef | grep SpliderWeb-0.0.1-SNAPSHOT.jar 2.有运行的jar包 杀死对应的进程 kill 进程号 3.无运行的jar包 部署项目 java -jar SpliderWeb-0.0.1-SNAPSHOT.j

  • 正版phpstorm免费激活步骤教程详解

    Phpstorm是大多数PHP程序员们爱不释手的一款编码的集成开发工具.它支持所有PHP语言功能, 提供最优秀的代码补全.重构.实时错误预防等等功能.但是对于一些php新手来说,总会有这样一个疑问,phpstorm免费吗?显然这个问题对于下载过phpstorm工具的朋友们都知道,phpstorm有30天的试用期,也就是30天内免费试用,并不需要激活. 那么phpstorm过期后又该如何继续操作呢?(2019.1.4日更新) 所以本篇给大家介绍一个重要的免费激活方法(也可在过期前激活),具体操作步

随机推荐