5步Spring Boot搭建简易邮箱验证系统,给自己的项目加35分

今天我们来看看如何用 Spring Boot 简易搭建一个邮箱验证接口。

许多的网站在注册账号之后,都会发送一封邮件到注册邮箱里,而用户需要到邮箱里打开这封验证邮件,并点击邮件里的链接,以向网站证明自己为该邮箱的拥有者。

1. 配置邮箱参数

为了让 Spring Boot 在用户注册成功的时候发送邮件,我们需要先添加一个邮箱服务依赖。

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

我们需要配置一个邮箱服务来帮我们发送验证邮箱的邮件,但在配置邮箱参数之前,我们要先决定使用哪一个邮箱服务。这里我们以 QQ 邮箱为例子,朋友们也可以搭建自己的邮箱服务器。

登录 QQ 邮箱之后,点击 设置 -> 账户,打开 “POP3/SMTP服务”,接着取得第三方客户端授权码。
在这里插入图片描述
接着我们打开 application.properties 文件来进行配置:

spring.mail.host=smtp.qq.com
spring.mail.protocol=smtp
spring.mail.username= # 填写你的发件邮箱地址
spring.mail.password= # 填写第三方客户端授权码
spring.mail.default-encoding=UTF-8
spring.mail.port=465
# 此为邮件加密服务
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
2. 创建实体类

当用户完成注册之后,我们需要在邮箱验证表里创建一条记录使用户的邮箱与一个唯一的加密 token 匹配,以提升之后验证邮箱时的安全性。

用户需要点击带有该 token 参数的网址,接着我们会检查这个表,token 核对成功之后才算是成功验证邮箱。

创建一个邮箱验证表实体类:

@Entity
@Table(name = "email_verifier")
public class EmailVerifier {
   
   
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private String email;

    private int userId;

	// 验证用的 token
    private String token;

	// getters and setters
}

接着创建一个用户实体类。我们需要给用户实体类一个 boolean 值的属性,代表其邮箱是否已经通过验证。默认为 false,因为刚注册成功的时候邮箱肯定是还没有通过验证的。

@Entity
@Table(name = "users")
public class User {
   
   
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private String email;

	// 邮箱是否成功验证,默认为 false
    @Column(name = "is_email_verified", columnDefinition = "boolean default false")
    private boolean isEmailVerified;

    @JsonIgnore
    private String password;

	// getters and setters
}
3. 创建仓库类

我们需要写一个简单的用户仓库类

@Repository
@Transactional
public class UserRepositoryImpl implements UserRepository {
   
   
    @PersistenceContext
    private EntityManager entityManager;

	// 将新用户插入用户表
    public void addUser(String email, String password) {
   
   
 		User user = new User();
 		entityManager.persist(user);
 		user.setEmail(email);
 		user.setPassword(password);
        entityManager.flush();
    }

	// 将用户表里的邮箱是否已验
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值