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的组合,我们可以实现高效的验证码管理系统。希望本文能对你有所帮助,顺利实现功能!