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

网友投稿 1056 2023-01-06

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

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") StringLveZZGlG 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语名。

       "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

   

       

       

       

       

       

       

       

   

   

       select * from user where UserNumber=#{UserNumber} and Password=#{Password} and status=1

   

   

       select * from user where Email=#{Email}

   

   

   

       insert into user ( UserNumber, Password,Email,status,code)

       values (#{UserNumber,jdbcType=VARCHAR}, #{Password,jdbcType=VARCHAR}, #{Email,jdbcType=VARCHAR},

               #{status,jdbcType=INTEGER},#{code,jdbcType=INTEGER})

   

   

   

       select * from user where code = #[code]

   

   

   

       update user set status=1,code=null where UserID=#{UserID}

   

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

       //发送激活邮件

       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

   

      http:// 

           

               

                注册新用户

           

           

           

请输入你的信息:

           

               

                   

                       

                       

                           

                       

                   

                   

                       

               

                           

                       

                   

                   

           http://            

               

                           

                       

                   

                   

                       

                           

                           

                       

                   

                   

                       

                       

                            我接受本

                            用户协议

                       

                   

                   

                   

                       

                           

                            重置

                       

                       

                            注册

                           

                       

                   

               

           

       

       

           

               class="back-to-login-link">

               

                返回登陆

           

               class="back-to-login-link">

               

                返回登陆

           

       

10.完整的项目部署

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:计算机移动应用开发技术书(移动应用开发和计算机网络技术)
下一篇:上海企业app开发制作(上海企业app开发制作)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~