⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/qq_42524288/article/details/110749086 「定格&不褪」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

1、登录注册思路

这是一个使用spring boot做的一个qq邮箱注册和登录的项目。 没写前端页面,使用postman测试。有截图详细。

1.1、思路

注册:通过输入的邮箱发送验证码,检验前端传来的验证码是否和后台生成的一致,若一致,将数据写入数据库,完成注册;

登录:通过输入的邮箱查询密码,然后比较密码是否一致,一致就是登录成功。

1.2、整个项目结构图

2、准备

2.1、开启邮箱POP3/SMTP服务

登录qq邮箱后,点击左上方的设置,选择账户,如下图。

然后一直往下滑,看到如下图的POP3/SMTP服务,点击开启,应该会让帮定的手机号发个短信,然后会收到一个授权码,一定要好好保存,在appliction.properties配置中会用到。

2.2、创建一个spring boot项目的时候,一直确认,jdk选择8。

下边是pom.xml中<dependencies>标签的全部依赖

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

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

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

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

<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>

<!--jdbc-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

</dependencies>
123456789101112131415161718192021222324252627282930313233343536373839404142

2.3、application.properties配置文件

application.properties配置文件

#邮箱配置
#平台地址,这里用的是qq邮箱,使用其他邮箱请更换
spring.mail.host = smtp.qq.com
#改成自己的邮箱
spring.mail.username = xxxxx@qq.com
#发送短信后它给你的授权码 填写到这里
spring.mail.password = xxxxxx
#这东西不用改
spring.mail.properties.mail.smtp.ssl.enable=true
##编码格式
spring.mail.default-encoding=UTF-8

#数据库相关配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/email?useSSL=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root

#配置mapper
mybatis.mapper-locations=classpath:mapper/*.xml
1234567891011121314151617181920

2.4、创建数据库

数据库结构如下图

创建一个数据库email

CREATE DATABASE email;
1

在email数据库创建user表

CREATE TABLE `user` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
1234567

3、全部代码类

如最上边的项目结构图。controller包是和前端对接的,mapper包中是接口,pojo是实体类,service层是逻辑代码,vo包是前端发送数据暂时保存。

执行流程: 使用postman发送请求,controller中会接受,然后调用service中的逻辑代码,service会调用的mapper中接口,mapper的对应的xml实现对数据库的各种操作。

3.1、UserController.java

package com.lu.youxiang.controller;

import com.lu.youxiang.service.MailService;
import com.lu.youxiang.vo.UserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;

@Controller
public class UserController {

@Autowired
private MailService mailService;

@PostMapping("/sendEmail")
@ResponseBody
public String sendEmail(String email, HttpSession httpSession){
mailService.sendMimeMail(email, httpSession);
return "sucess";
}

@PostMapping("/regist")
@ResponseBody
public String regist(UserVo userVo, HttpSession session){
mailService.registered(userVo,session);
return "sucess";
}

@PostMapping("/login")
@ResponseBody
public String login(String email, String password){
mailService.loginIn(email,password);
return "sucess";
}
}
1234567891011121314151617181920212223242526272829303132333435363738

3.2、UserMapper.java

package com.lu.youxiang.mapper;

import com.lu.youxiang.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Mapper
@Repository
public interface UserMapper {

/**
* 注册,插入数据
* @param user
*/
void insertUser(User user);

/**
* 根据邮箱查询
* @param email
* @return
*/
User queryByEmail(String email);
}
1234567891011121314151617181920212223

3.3、User.java

package com.lu.youxiang.pojo;

public class User {
private String username;
private String password;
private String email;

//get和set方法省略了,自己生成一下

}
12345678910

3.4、MailService.java ,重要。

package com.lu.youxiang.service;

import com.lu.youxiang.mapper.UserMapper;
import com.lu.youxiang.pojo.User;
import com.lu.youxiang.vo.UserVo;
import com.lu.youxiang.vo.UserVoToUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpSession;
import java.util.Random;

@Service
public class MailService {
@Autowired
private JavaMailSender mailSender;//一定要用@Autowired

@Autowired
private UserMapper userMapper;//注入UserMapper,交给bena

//application.properties中已配置的值
@Value("${spring.mail.username}")
private String from;

/**
* 给前端输入的邮箱,发送验证码
* @param email
* @param session
* @return
*/
public boolean sendMimeMail( String email, HttpSession session) {
try {
SimpleMailMessage mailMessage = new SimpleMailMessage();

mailMessage.setSubject("验证码邮件");//主题
//生成随机数
String code = randomCode();

//将随机数放置到session中
session.setAttribute("email",email);
session.setAttribute("code",code);

mailMessage.setText("您收到的验证码是:"+code);//内容

mailMessage.setTo(email);//发给谁

mailMessage.setFrom(from);//你自己的邮箱

mailSender.send(mailMessage);//发送
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}

/**
* 随机生成6位数的验证码
* @return String code
*/
public String randomCode(){
StringBuilder str = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 6; i++) {
str.append(random.nextInt(10));
}
return str.toString();
}

/**
* 检验验证码是否一致
* @param userVo
* @param session
* @return
*/
public boolean registered(UserVo userVo, HttpSession session){
//获取session中的验证信息
String email = (String) session.getAttribute("email");
String code = (String) session.getAttribute("code");

//获取表单中的提交的验证信息
String voCode = userVo.getCode();

//如果email数据为空,或者不一致,注册失败
if (email == null || email.isEmpty()){
//return "error,请重新注册";
return false;
}else if (!code.equals(voCode)){
//return "error,请重新注册";
return false;
}

//保存数据
User user = UserVoToUser.toUser(userVo);

//将数据写入数据库
userMapper.insertUser(user);

//跳转成功页面
return true;
}

/**
* 通过输入email查询password,然后比较两个password,如果一样,登录成功
* @param email
* @param password
* @return
*/

public boolean loginIn(String email, String password){

User user = userMapper.queryByEmail(email);

if(!user.getPassword().equals(password)){
return false;
}
System.out.println("登录成功:数据库密码是:"+user.getPassword());
return true;
}
}
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123

3.5、UserVo.java

package com.lu.youxiang.vo;

public class UserVo {
private String username;

private String password;

private String email;
// 验证码
private String code;

//省略了get和set方法,自己生成一下
}
12345678910111213

3.6、UserVoToUser.java

package com.lu.youxiang.vo;

import com.lu.youxiang.pojo.User;

public class UserVoToUser {

/**
* 将表单中的对象转化为数据库中存储的用户对象(剔除表单中的code)
* @param userVo
* @return
*/
public static User toUser(UserVo userVo) {

//创建一个数据库中存储的对象
User user = new User();

//传值
user.setUsername(userVo.getUsername());
user.setPassword(userVo.getPassword());
user.setEmail(userVo.getEmail());

// 返回包装后的对象
return user;
}
}
12345678910111213141516171819202122232425

主配置类不复制了,创建springboot项目后,就有。

3.7、UserMapper.xml 在resources包下创建mapper包,用来放xml,然后再这个包中创建UserMapper.xml,内容如下。

<?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.lu.youxiang.mapper.UserMapper">

<insert id="insertUser" parameterType="com.lu.youxiang.pojo.User">
insert into user (username,password,email)
values (#{username},#{password},#{email})
</insert>

<select id="queryByEmail" resultType="com.lu.youxiang.pojo.User">
select *
from user
where email = #{email}
</select>

</mapper>
123456789101112131415161718

4、使用postman测试

如果没有这个软件,安装一下,使用很简单。 打开后,点击左上角的file,再点击New Tab,就会出来一个页面。 (或者使用Ctrl+T快捷键)

4.1、测试发送邮件

请求url:

http://localhost:8080/sendEmail?email=123456@qq.com

把请求url复制到如下如的url中, 邮箱换成自己的,请求方式换成POST。点击send。 如下图

4.2、测试注册

请求url:

http://localhost:8080/regist

把请求url复制到如下如的url中, 邮箱换成自己的,code的值写邮箱收到的,请求方式换成POST。点击send,如下图

4.3、测试登录

请求url:

http://localhost:8080/login?email=123456@qq.com&password=12345

复制url,改成POST请求,点击Send。

如下图

文章目录
  1. 1. 1、登录注册思路
    1. 1.1. 1.1、思路
    2. 1.2. 1.2、整个项目结构图
  2. 2. 2、准备
    1. 2.1. 2.1、开启邮箱POP3/SMTP服务
    2. 2.2. 2.2、创建一个spring boot项目的时候,一直确认,jdk选择8。
    3. 2.3. 2.3、application.properties配置文件
    4. 2.4. 2.4、创建数据库
  3. 3. 3、全部代码类
  4. 4. 4、使用postman测试
    1. 4.1. 4.1、测试发送邮件
    2. 4.2. 4.2、测试注册
    3. 4.3. 4.3、测试登录