spring boot实现邮箱验证码注册
最近在设计自己的博客系统,涉及到用户注册与登录验证。
注册这地方我先采用最传统的邮箱验证码方式。具体的实现方式如下:
1.有关如何配置spring boot发送邮件,请参考我的另一篇文章:
https://blog.csdn.net/IndexMan/article/details/87563438
2.搞懂第1步再继续下面的操作
项目源码:https://gitee.com/indexman/mailtest.git
项目总体结构:
1.创建表
创建数据库:test
编码:uft-8
执行以下SQL
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 DEFAULT CHARSET=utf8;
2.搭建spring boot环境
2.1 配置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.0.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.laoxu.java</groupId><artifactId>mailtest</artifactId><version>0.0.1-SNAPSHOT</version><name>mailtest</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-web</artifactId></dependency><!--mail--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><!--thymeleaf--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><!--Druid数据库连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--mysql--><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><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
2.2 配置application.yml文件
server:port: 8080
spring:# 配置发送方信息mail:host: smtp.qq.comusername: 836491123@qq.com # 邮箱地址password: wlcfnoewxcbaeb123 # 授权码properties:mail:smtp:ssl:enable: true# thymeleafthymeleaf:cache: falseprefix: classpath:/templates/suffix: .htmlmvc:date-format: yyyy-MM-dd# mysqldatasource:driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: root123url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT&useSSL=falsetype: com.alibaba.druid.pool.DruidDataSource
# mybatis
mybatis:config-location: classpath:mybatis/mybatis-config.xmlmapper-locations: classpath:mybatis/mapper/*.xml
2.3 工具类
/*** @description: ID管理类* @author: luohanye* @create: 2019-04-19**/
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");}
}
3.编写User模型
/*** @description: 用户* @author: luohanye* @create: 2019-04-17**/@Data
public class User implements Serializable {private Integer id;private String username;private String password;private String email;// 激活状态 0 未激活 1 已激活private Integer activeStatus;// 激活码private String activeCode;
}
4.编写UserDao
@Component
public interface UserDao {/*** 注册* @param user*/void insert(User user);/*** 根据激活码查询用户* @param activeCode* @return*/User selectUserByActiveCode(String activeCode);/*** 更新用户* @param user*/void update(User user);/*** 查询用户* @param user* @return*/User select(User user);
}
5.编写mapper文件
<?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.laoxu.java.mailtest.dao.UserDao"><resultMap id="userMap" type="com.laoxu.java.mailtest.entity.User"><result property="id" column="id"/><result property="username" column="username"/><result property="password" column="password"/><result property="email" column="email"/><result property="activeStatus" column="active_status"/><result property="activeCode" column="active_code"/></resultMap><insert id="insert" parameterType="com.laoxu.java.mailtest.entity.User">insert into user ( username, password,email,active_status,active_code)values (#{username}, #{password}, #{email},#{activeStatus},#{activeCode})</insert><select id="selectUserByActiveCode" parameterType="String" resultType="com.laoxu.java.mailtest.entity.User">select * from user where active_code = #{activeCode}</select><!--激活账户,修改用户状态--><update id="update" parameterType="com.laoxu.java.mailtest.entity.User">update userset active_status=#{activeStatus},username=#{username},password=#{password},email=#{email}, active_status=#{activeStatus},active_code=#{activeCode}where id=#{id}</update><!--登录,根据 activeStatus=1 进行查询--><select id="select" resultType="com.laoxu.java.mailtest.entity.User">select * from user where username=#{username} and password=#{password} and active_status=1</select>
</mapper>
6.编写UserService及其实现
public interface UserService {/*** 用户注册* @param user*/void add(User user);/*** 根据激活码查找用户* @param activeCode* @return*/User getUserByActiveCode(String activeCode);/*** 修改* @param user*/void modify(User user);/*** 登录* @param user* @return*/User get(User user);
}
/*** @description:* @author: luohanye* @create: 2019-04-18**/
@Service
@Transactional
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Autowiredprivate MailService mailService;@Overridepublic void add(User user) {userDao.insert(user);//获取激活码String code = user.getActiveCode();System.out.println("激活码:"+code);//主题String subject = "来自罗汉爷网站的激活邮件";//上面的激活码发送到用户注册邮箱String context = "<a href=\"http://localhost:8080/user/checkCode?code="+code+"\">激活请点击:"+code+"</a>";//发送激活邮件mailService.sendMimeMail (user.getEmail(),subject,context);}@Overridepublic User getUserByActiveCode(String activeCode) {return userDao.selectUserByActiveCode(activeCode);}@Overridepublic void modify(User user) {userDao.update(user);}@Overridepublic User get(User user) {return userDao.select(user);}
}
7.编写MailService及其实现
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);
}
/*** @description: 邮件处理类* @author: luohanye* @create: 2019-04-19**/
@Service
public class MailServiceImpl implements MailService {private final Logger logger = LoggerFactory.getLogger(this.getClass());@AutowiredJavaMailSenderImpl mailSender;@Value("${spring.mail.username}")private String from;@Overridepublic 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);}}@Overridepublic 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.前端页面
去看源码。
9.编写UserController
@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;/*** 注册* @param user* @return*/@RequestMapping(value = "/register")public String register(User user){user.setActiveStatus(0);String activeCode = IDUtils.getUUID();user.setActiveCode(activeCode);userService.add(user);return "success";}/*** 校验激活码* @param code* @return*/@RequestMapping(value = "/checkCode")public String checkCode(String code){User user = userService.getUserByActiveCode(code);//如果用户不等于null,把用户状态修改status=1if (user !=null){user.setActiveStatus(1);//把code验证码清空,已经不需要了user.setActiveCode("");userService.modify(user);return "activeSuccess";}return "login";}/*** 登录* @return login*/@RequestMapping(value = "/loginPage")public String login(){return "login";}/*** 登录*/@RequestMapping(value = "/login")public String login(User user, Model model){User u = userService.get(user);if (u !=null){return "welcome";}return "error";}
}
10.编写IndexController
@Controller
public class IndexController {@RequestMapping("/")public String index(){return "index";}
}
11.测试应用
11.1 注册
11.2 激活
登录注册邮箱查看邮件:
点击激活链接:
11.3 登录成功
11.4 登录失败
项目源码:https://gitee.com/indexman/mailtest.git
spring boot实现邮箱验证码注册相关推荐
- Spring Boot项目邮箱验证码功能的实现(以QQ邮箱为例)
既然前两天翻出我大学时期做的一个项目,那正好顺手将其中的邮箱验证码功能也分享记录一下. 开启QQ邮箱传输协议服务 进入QQ邮箱界面,点击设置--账户--开启以下两个服务,当开启IMAP/SMTP会有一 ...
- mysql查询使用qq邮箱注册_Spring Boot实现qq邮箱验证码注册和登录验证功能
1.登录注册思路 这是一个使用spring boot做的一个qq邮箱注册和登录的项目. 没写前端页面,使用postman测试.有截图详细. 1.1.思路 注册:通过输入的邮箱发送验证码,检验前端传来的 ...
- Vue+Spring Boot实现图片验证码、邮箱验证码以及Cookie记住我功能(前后端代码详解)
Vue实现图片验证码.邮箱验证码以及Cookie记住我功能 前言 图片验证码实现 Vue前端实现 Spring Boot后端实现 邮箱验证码实现 Vue前端实现 Spring Boot后端实现 Coo ...
- Spring boot 发送手机验证码
由于阿里云现在的短信签名无法通过申请,所以我这里选择了中国网建SMS短信平台(手机号注册即用,有免费赠送的几条短信测试) demo代码地址:https://github.com/mer97/sprin ...
- Spring Boot+Mybatis:实现数据库登录注册与两种properties配置参数读取
〇.参考资料 1.hutool介绍 https://blog.csdn.net/abst122/article/details/124091375 2.Spring Boot+Mybatis实现登录注 ...
- Spring Boot之注册servlet三大组件
由于Spring Boot默认是以jar包的形式启动嵌入式的Servlet容器来启动Spring Boot的web应用是,没有web.xml配置文件 注册三大组件用以下方式 ServletRegist ...
- 由浅入深分布式(5)dubbo提供者用内网地址注册provider以及 spring boot admin client用主机名注册spring boot admin server
之前遇到过dubbo提供者用内网地址注册provider的问题 当时改了host文件成功了 但是没有想为什么会有这个问题 现在使用spring boot admin 来监控spring boot项目出 ...
- Spring Boot Admin 2.1.0 全攻略
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序. ...
- 第8章Spring Boot整合监控
8.1 使用actuator监控 8.1.1 actuator是什么 在Spring Boot的众多Starter POMs中有一个特殊的模块,不同于其他模块大多用于开发业务功能或连接一些其他外部资源 ...
- Spring Boot统一异常处理的拦截指南
通常我们在Spring Boot中设置的统一异常处理只能处理Controller抛出的异常.有些请求还没到Controller就出异常了,而这些异常不能被统一异常捕获,例如Servlet容器的某些异常 ...
最新文章
- vue2.0 之文本渲染-v-html、v-text
- dsp调音一次多少钱_DSP调音中EQ使用技巧
- fastjson jar包_经过性能对比,我发现温少的FastJson真牛。
- 如何在Win Server 2008R2环境下,把域帐户加到本地管理员组??
- java 文曲星猜数字,文曲星里的猜数字代码(原创)
- 程序员常常会用到的几款文本编辑器
- 【Android开发】【数据库】Realm For Android
- python mac地址 js_使用Python从设备获取MAC地址
- gini系数 决策树_决策树原理,机器学习系列
- SpringMVC——架构,搭建,SSM搭建,POST请求乱码问题,参数转换器
- Linux 查看日志的方法
- 中国钢铁物流行业发展策略分析及投资建议咨询报告2021-2027年
- 2023年辽宁大学马克思主义中国化研究考研上岸前辈备考经验指导
- 谷歌分析数据导入4种方式
- Python从图片提取文字
- 漫谈程序员(十)大白菜装机版安装win7系统使用教程
- 查看ajax传来的数据,jQuery AJAX 方法 success()后台传来的4种数据
- 原生js实现轮盘抽奖,控制中奖概率(完整示例)
- pageadmin CMS网站制作教程
- Java面试题 java高级
热门文章
- 咱们的课程里,有微信的这种菜单示例吗?---酷课堂iOS交流群问答整理(201810期)
- 无人机倾斜摄影详解,三维实景建模应用
- Windows 启动 Idea 报错 if you already hava a 64-bit JDK ... 以及 failed to create jvm...
- 中华石杉Java面试突击第一季笔记二(分布式搜索引擎)
- php随机产生六位数密码
- 适应度函数及遗传操作
- win10系统CAJViewer 绿色提示缺少由于找不到 MSVCR71.dll
- 自己来制作iso镜像用于安装OpenBSD
- linux下如何统计一个目录下的文件个数以及代码总行数的命令
- msyql创建数据库并指定字符集