SpringBoot 轻松实现发送邮箱验证码及Redis缓存

在现代web应用中,用户注册、登录等环节常需要通过邮箱验证码来验证用户身份。本文将通过Spring Boot框架,以及Redis作为缓存,轻松实现发送邮箱验证码的功能,并附带HTML模板的示例。

环境准备

首先,我们需要确保已经搭建好Spring Boot项目,并引入以下依赖。

Maven依赖

pom.xml中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

邮件配置

application.properties文件中添加邮件配置:

spring.mail.host=smtp.example.com  # 邮件服务器
spring.mail.port=587                 # 端口
spring.mail.username=your_email@example.com  # 发件邮箱
spring.mail.password=your_email_password   # 邮件密码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

创建EmailService

首先,我们需要创建一个服务类,用于发送电子邮件:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

@Service
public class EmailService {

    @Autowired
    private JavaMailSender mailSender;

    public void sendVerificationEmail(String to, String verificationCode) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom("your_email@example.com");
        message.setTo(to);
        message.setSubject("邮箱验证码");
        message.setText("您的验证码是: " + verificationCode);

        mailSender.send(message);
    }
}

创建验证码生成与发送的Controller

接下来,我们创建一个控制器,负责接收请求、生成验证码、发送邮件及将验证码存入Redis。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping("/api")
public class VerificationController {

    @Autowired
    private EmailService emailService;

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @PostMapping("/sendCode")
    public String sendVerificationCode(@RequestParam String email) {
        // 生成随机验证码
        String verificationCode = String.valueOf((int)(Math.random() * 9000) + 1000);

        // 保存到Redis中,设置过期时间为5分钟
        redisTemplate.opsForValue().set(email, verificationCode, 5, TimeUnit.MINUTES);

        // 发送验证码邮件
        emailService.sendVerificationEmail(email, verificationCode);

        return "验证码已发送至您的邮箱。";
    }

    @GetMapping("/verifyCode")
    public String verifyCode(@RequestParam String email, @RequestParam String code) {
        String cachedCode = redisTemplate.opsForValue().get(email);
        if (cachedCode != null && cachedCode.equals(code)) {
            // 验证码正确,清除缓存
            redisTemplate.delete(email);
            return "验证码验证成功。";
        } else {
            return "验证码不正确或已过期。";
        }
    }
}

HTML模板示例

可以使用以下HTML模板发送邮件:

<!DOCTYPE html>
<html>
<head>
    <title>邮箱验证码</title>
</head>
<body>
    <h1>亲爱的用户,</h1>
    <p>您的验证码是: <strong>${verificationCode}</strong></p>
    <p>请在5分钟内输入该验证码。</p>
    <p>谢谢,</p>
    <p>您的团队</p>
</body>
</html>

总结

以上示例展示了如何在Spring Boot中实现邮箱验证码的发送与验证功能,并使用Redis来缓存验证码。此方法提高了系统的安全性,避免了重复发送相同验证码的情况。通过简单的Controller与Service的组合,我们可以实现高效的验证码管理系统。希望本文能对你有所帮助,顺利实现功能!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部