连云港网站优化方案,隆昌市住房和城乡建设厅网站,免费网课平台,智慧团建网站几点关闭文章目录 依赖配置开启 QQ 邮箱 SMTP 服务配置文件代码实现验证码服务邮件服务接口实现执行流程 依赖配置
dependencies !-- Spring Boot Starter Web -- dependency groupIdorg.springframework.boot/groupId artifactIdspr… 文章目录 依赖配置开启 QQ 邮箱 SMTP 服务配置文件代码实现验证码服务邮件服务接口实现执行流程 依赖配置
dependencies !-- Spring Boot Starter Web -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- Redis 集成依赖 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId version3.4.2/version /dependency dependency groupIdorg.apache.commons/groupId artifactIdcommons-pool2/artifactId version2.11.1/version /dependency dependency groupIdio.lettuce/groupId artifactIdlettuce-core/artifactId version6.3.2.RELEASE/version /dependency!-- 邮件发送支持 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-mail/artifactId /dependency !-- 验证码生成工具 -- dependency groupIdcommons-lang/groupId artifactIdcommons-lang/artifactId version2.6/version /dependency
/dependencies开启 QQ 邮箱 SMTP 服务
打开浏览器登录到 QQ 邮箱。点击左上角的齿轮按钮进入设置页面见下图 4. 在设置中找到“第三方服务”激活 IMAP/SMTP默认为禁用并生成独立的 SMTP 授权码。 配置文件
spring: data: redis: host: your_redis_hostport: your_redis_port # 通常为6379password: your_redis_passwordlettuce: pool: max-active: 8 # 最大连接数 max-idle: 8 # 最大空闲连接数 min-idle: 0 # 最小空闲连接数 max-wait: 100 # 连接等待时间 mail: host: smtp.qq.com port: 465 username: your_qq_accountqq.compassword: 111 # 输入 QQ 邮箱的授权码properties: mail: smtp: ssl: enable: true # QQ 邮箱需要开启 SSLauth: true代码实现
验证码服务
使用 Redis 缓存验证码并实现验证码的校验功能
Service
public class CaptchaService { Autowired private StringRedisTemplate redisTemplate; /** * 生成验证码 * param email 目标邮箱 * return 生成的验证码 */ public String generateCaptcha(String email) { // 生成验证码 String code RandomStringUtils.randomNumeric(6); redisTemplate.opsForValue().set( CAPTCHA: email, code, Duration.ofMinutes(5) // 验证码有效期为5分钟 ); return code; } /** * 验证码校验 * param email 邮箱 * param code 验证码 * return 是否验证通过 */ public boolean validateCaptcha(String email, String code) { String captcha redisTemplate.opsForValue().get(CAPTCHA: email); return captcha ! null captcha.equals(code); }
}邮件服务
Service
public class EmailService { Autowired private JavaMailSender mailSender; /** * 发送验证码邮件 * param email 收件人邮箱 * param authCode 验证码 */ public void sendCaptchaEmail(String email, String authCode) { SimpleMailMessage message new SimpleMailMessage(); message.setFrom(your_qq_accountqq.com); message.setTo(email); message.setSubject(验证码); message.setText(您的验证码是 authCode 有效期为5分钟); mailSender.send(message); }
}接口实现
RestController
public class AuthController { Autowired private UserService userService; Autowired private CaptchaService captchaService; Autowired private EmailService emailService; /** * 注册接口 * param userDTO 用户信息 * param captcha 验证码 * return 注册结果 */ PostMapping(/register) public Result register(RequestBody UserDTO userDTO, RequestParam String captcha) { if (!captchaService.validateCaptcha(userDTO.getEmail(), captcha)) { return Result.error(验证码错误); } userService.register(userDTO); return Result.success(); } /** * 登录接口 * param userDTO 用户信息 * return 登录结果 */ PostMapping(/login) public Result login(RequestBody UserDTO userDTO) { User user userService.login(userDTO); if (user null) { return Result.error(用户不存在); } // 登录成功生成 JWT 令牌 MapString, Object claims new HashMap(); claims.put(userId, user.getId()); String token JwtUtils.createJWT(secretKey, 60000, claims); UserVO userVO new UserVO(); BeanUtils.copyProperties(user, userVO); LoginResponse loginResponse new LoginResponse(userVO, token); return Result.success(loginResponse); } /** * 发送验证码接口 * param email 邮箱地址 * return 发送结果 */ PostMapping(/send-code) public Result sendCode(RequestParam String email) throws MessagingException { // 校验邮箱格式if (!RegexUtils.isEmailValid(email)) { return Result.error(邮箱格式非法); } String code captchaService.generateCaptcha(email); emailService.sendCaptchaEmail(email, code); return Result.success(); }
}执行流程
用户输入邮箱调用 /send-code 接口获取验证码。用户填写验证码并调用 /register 接口进行注册。系统校验验证码验证成功则注册失败则返回错误信息。