600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 使用SpringBoot实现QQ邮箱发送验证码校验 注册的步骤详解(配图)

使用SpringBoot实现QQ邮箱发送验证码校验 注册的步骤详解(配图)

时间:2018-07-04 08:36:46

相关推荐

使用SpringBoot实现QQ邮箱发送验证码校验 注册的步骤详解(配图)

迷途漫漫,终有一归。——米兰昆德拉

引入的依赖

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

注册

从前端开始,用户到注册页面之后,填写用户信息(这里的uid其实不应该存在,重点是,请自行忽略页面的外观

在点击“获取验证码之后”,前端发送一个ajax请求:

<script>function sendEmail() {var email = $("#email");$.ajax({url: "/sendEmail", data: {"email": email.val()}, type: "post", success: function (res) {if (res === "success") {confirm("send successful!")}}})}</script>

后端相应的接口在接受到请求之后,开始调用方法发送验证码

@PostMapping("sendEmail")@ResponseBodypublic String sendEmail(String email, HttpSession session) {myEmail.sendMail(email, session);return "success";}

在调用发送邮件的方法之前,我们需要在application.yml中做一些配置:

# 邮箱配置mail:host: username: **************password: **************default-encoding: utf-8properties:mail:smtp:auth: truestarttls:enable: truerequired: true

其中:username后边需要填写发件人的邮箱地址,要注意的是password后边需要的是这个东西,并不是发件人的登陆密码,而是在登陆到发件人的QQ邮箱(电脑登陆)后,点到设置->账户点击开启POP3之后会获得的一个字符串

在设置好了配置文件之后,再编写发送邮件的方法。(如下)方法中携带了收件人,也就是用户的邮箱,session两个参数,session参数用来以后存储验证码以便于校验。

package com.yuxi.util;import org.springframework.beans.factory.annotation.Value;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import org.ponent;import javax.annotation.Resource;import javax.mail.MessagingException;import javax.mail.internet.MimeMessage;import javax.servlet.http.HttpSession;import java.util.Random;@Componentpublic class MyEmail {@Value("${spring.mail.username}")private String from;@ResourceJavaMailSender javaMailSender;/*** 发送验证码** @param email* @param session*/public void sendMail(String email, HttpSession session) {MimeMessage mimeMessage = javaMailSender.createMimeMessage();try {MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);// 设置发件人mimeMessageHelper.setFrom(from);// 设置收件人mimeMessageHelper.setTo(email);// 设置邮件主题mimeMessageHelper.setSubject("信息管理验证");//生成随机数String random = randomInteger();//将随机数放置到session中session.setAttribute("email",email);session.setAttribute("code",random);// 设置验证码的样式mimeMessageHelper.setText("<font style='color:green'>"+random+"</font>",true);javaMailSender.send(mimeMessage);} catch (MessagingException e) {e.printStackTrace();}}/*** 生成随机验证码** @return*/private String randomInteger() {Random random = new Random();StringBuffer stringBuffer = new StringBuffer();//生成6位的随机数for (int i = 0;i<6;i++){int i1 = random.nextInt(10);stringBuffer.append(i1);}return stringBuffer.toString();}}

在执行完上边这个类中的方法之后,正在注册的用户便会收到邮箱发送的验证码。用户就可以输入验证码并且提交了。

校验

接下来,后端在接受到用户提交的信息之后,就需要校验验证码了。方法如下:

/*** 验证注册信息并且保存用户数据** @param userVer* @param session* @return*/@PostMapping("registered")public String registered(UserVer userVer, HttpSession session, Model model) {// 获取session中的验证信息String email = (String) session.getAttribute("email");String code = (String) session.getAttribute("code");// 获取表单中提交的验证信息String verCode = userVer.getCode();// 失败之后重新注册if (email == null || email.isEmpty()) {return "userRegistered";} else if (!code.equals(verCode)) {return "userRegistered";}// 保存数据userService.insert(UserVer2User.toUser(userVer));//下边返回的就是注册成功之后的跳转了return userController.selectAll(model);}

值得一说的是方法中的UserVer userVer这个参数了,这个参数其实是在数据库中存储的对象属性中加了一个code验证码属性(最后一行),如下:

@Datapublic class UserVer {private String name;private String password;private int age;private String email;private String sex;private String addr;// 验证码private String code;}

而真正在数据库中存储的对象属性是这样的:

@Data@AllArgsConstructor@NoArgsConstructorpublic class User implements Serializable {private static final long serialVersionUID = 432596037690782342L;private Integer uid;private String name;private String sex;private Integer age;private String addr;private String email;private String password;}

这是因为前端传过来的对象中包含了验证码这个属性,但是显而易见,我们不能将用户输入的随机验证码也存储到数据库中,所以这里需要一个UserVer的中间对象来保存从前端传过来的对象,而在校验完之后,需要存储数据库的时候调用方法:

userService.insert(UserVer2User.toUser(userVer));

UserVer对象转换成正真的user对象之后再进行存储,方法如下:

/*** @author Administrator*/public class UserVer2User {/*** 将表单中的对象转化为数据库中存储的用户对象(剔除表单中的code)* @param userVer* @return*/public static User toUser(UserVer userVer) {// 创建一个数据库中存储的对象User user = new User();// 传值user.setUid(null);user.setName(userVer.getName());user.setEmail(userVer.getEmail());user.setPassword(userVer.getPassword());user.setSex(userVer.getSex());user.setAge(userVer.getAge());user.setAddr(userVer.getAddr());// 返回包装后的对象return user;}}

uid是自增的,设置为空就好

至此,邮箱的发送及验证完成。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。