SpringBoot实现发送自定义验证码

这篇具有很好参考价值的文章主要介绍了SpringBoot实现发送自定义验证码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

随着互联网的不断发展,验证码的作用越来越重要。作为常见的一种防范机制,验证码能有效避免机器人或者别有用心的人利用自动化程序进行注入攻击、暴力破解等恶意行为。在本文中,我们将讲解如何使用SpringBoot框架实现自定义验证码发送功能。您可根据自己应用场景的不同,对代码进行调整扩展。

环境和工具

  • IDE:IntelliJ IDEA
  • JDK:1.8
  • SpringBoot版本:2.4.5.RELEASE
  • Maven

实现思路

我们要实现的自定义验证码发送功能,其实就是在用户完成表单填写后,向用户发送一条验证码信息,以确定用户身份是否合法。在SpringBoot中,我们最好的方式就是借助Spring Framework自带的邮件发送工具实现。具体实现步骤如下:

  1. 定义邮箱模板和验证码生成方法
  2. 定义邮件发送服务
  3. 在控制层调用发送服务,并返回相应的结果信息

接下来,我们将逐步讲解具体步骤。

正文

1. 定义邮箱模板和验证码生成方法

在这里,我们先定义一个验证码生成工具类,通过调用Java自带的Random和StringBuilder类生成一个长度为6的纯数字验证码:

import java.util.Random;

/**
 * 验证码生成工具类
 */
public class CodeUtil {

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

接下来,我们需要定义发送邮件的模板,在这里我使用了Thymeleaf模板引擎,处理HTML模板:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>
    <h1>验证码</h1>
    <p th:text="'您的验证码是:' + ${captcha}" style="font-size: 20px;color: #3385ff;"></p>
</body>
</html>

2. 定义邮件发送服务

在这里,我们定义一个基于JavaMailSender的邮件发送服务:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.io.UnsupportedEncodingException;

@Service
public class EmailServiceImpl implements EmailService {

    @Autowired
    private JavaMailSender javaMailSender;

    /**
     * 发送邮件
     *
     * @param to         收件人邮箱地址
     * @param code       验证码
     * @param subject    邮件主题
     * @param template   邮件模板
     * @param attachment 附件地址(可选)
     */
    public void sendEmail(String to, String code, String subject, String template, String attachment)
            throws MessagingException, UnsupportedEncodingException {
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom("您的发件人邮箱地址", "您的昵称");
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(CodeUtil.generateCode(), true);

        // 添加附件
        if (attachment != null) {
            FileSystemResource fileSystemResource = new FileSystemResource(new File(attachment));
            helper.addAttachment("附件", fileSystemResource);
        }

        javaMailSender.send(message);
    }
}

3. 在控制层调用发送服务,并返回相应的结果信息

最后一步,我们在控制层调用发送服务,并返回相应的结果信息。我们定义一个Controller,其中包含一个URL接口用于发送邮件。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.web.bind.annotation.*;

import javax.mail.MessagingException;
import java.io.UnsupportedEncodingException;

@RestController
public class EmailController {

    @Autowired
    private EmailService emailService;

    /**
     * 发送邮件
     *
     * @param to 邮件收件人
     * @return 成功或失败提示信息
     */
    @GetMapping("/sendEmail")
    public String sendEmail(@RequestParam String to) {
        try {
            String code = CodeUtil.generateCode();
            String subject = "验证码信息";
            String template = "验证码模板";
            String attachment = null;

            emailService.sendEmail(to, code, subject, template, attachment);
            return "验证码发送成功,请注意查收!";
        } catch (MailException | MessagingException | UnsupportedEncodingException e) {
            e.printStackTrace();
            return "验证码发送失败,请重试!";
        }
    }
}

最后,我们需要配置邮件发送相关的信息,如邮件服务器地址、端口号、账号密码等信息。在 application.properties 或者 application.yml 中添加如下配置:

spring.mail.host=smtp.163.com #SMTP 服务器地址
spring.mail.username=your_username@163.com #发送者邮箱账号
spring.mail.password=your_password #发送者邮箱密码
spring.mail.port=25 #SMTP服务器端口号
spring.mail.protocol=smtp #邮件协议,默认为smtp
spring.mail.properties.mail.smtp.auth=true #SMTP 登录认证
spring.mail.properties.mail.smtp.starttls.enable=true #如果是使用加密类的邮件协议,需要设置此项为true

总结

本文讲解了如何使用SpringBoot框架实现自定义验证码发送功能。通过验证码的使用,可以有效保障您应用的安全性。希望您在开发过程中能够参考以上内容,实现更加优秀的应用程序。文章来源地址https://www.toymoban.com/news/detail-453335.html

参考资料

  • Spring Framework Docs
  • Thymeleaf Docs
  • JavaMailSender Docs

到了这里,关于SpringBoot实现发送自定义验证码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot——短信发送、手机验证码登录

    目录 一、短信发送 1.1 阿里云短信服务 1.1.1 设置短信签名 1.1.2 模板管理 1.1.3 设置AccessKey 1.2 短信发送——代码开发 1.2.1 导入maven坐标 1.2.2 调用API 1.2  手机验证码登录 1.2.1 用户数据库表 1.2.2  修改过滤器 1.2.3   随机生成验证码的工具类 1.2.4 手机验证码登录-- 发送验证码

    2023年04月22日
    浏览(44)
  • SpringBoot整合QQ邮箱发送验证码

    基于SpringBoot + QQ邮箱服务 + Hutools实现的获取验证码功能,接下来从如何申请授权码,如何配置项目,如何启动项目,如何测试项目进行讲解,下面的图片是一个测试案例,使用postman进行测试,在测试上填写发送人的邮箱,即可收到验证码邮箱 1.从仓库拉取代码 2.需要申请邮

    2024年02月07日
    浏览(62)
  • 【Springboot】| 阿里云发送短信验证码,你会了吗?

    专栏 名字 🔥Elasticsearch专栏 es 🔥spring专栏 spring开发 redis专栏 redis学习笔记 🔥项目专栏 项目集锦 修bug专栏 bug修理厂 狮子之前发了一篇《邮箱发送验证码,你会了吗?》,很快上了热度榜单,但是那篇文章只是简单介绍了如何接收验证码的流程以及安利了一个接收验证码的

    2024年02月08日
    浏览(44)
  • 如何通过腾讯云短信实现发送验证码并校验验证码以实现登录功能

    验证码相关的10种技术 图像处理技术:生成、识别、验证验证码的图像。 机器学习技术:让计算机自动学习并识别验证码。 文字识别技术:将图像中的文字转换成计算机可读的文本。 模式识别技术:识别验证码中的模式及规律。 图像噪声处理技术:去除图像中的噪声干扰。

    2024年02月10日
    浏览(52)
  • 【账号系统之(手机验证码登录)】使用阿里云短信服务,实现服务商给手机发送验证码功能。

    目录 一、前言 二、前期准备 三、购买短信服务 四、申请签名和模板 (1) 进入阿里云短信服务控制台 (2) 添加签名 (3) 添加模板 五、RAM申请及权限配置 (1) 进入RAM访问控制界面 (2) 创建用户 (3) 分配权限 (4) 创建角色 (5) 记录段的值 六、阿里云.NET SDK身份验证接入 (1) 了解

    2024年02月04日
    浏览(56)
  • 项目7:(aliyun)实现短信的发送和验证微服务和上传文件删除文件微服务

    ①gulimall-common和service-base放什么? gulimall-common写全局用的工具包 全局异常处理 全局返回值 工具包(生成随机数,校验手机号) service-base写服务的配置 redis配置类序列化的方式 swagger文档生成分组 ②生成四位或六位随机数 ③校验手机号码正确 ④补充错误代码-501阿里云响应失

    2023年04月19日
    浏览(47)
  • 【若依】框架搭建,前端向后端如何发送请求,验证码的实现,开启注册功能

    若依框架(Ruoyi)是一款基于Spring Boot和Spring Cloud的开源快速开发平台。它提供了一系列的基础功能和通用组件,能够帮助开发者快速构建企业级应用。若依框架采用了模块化的设计理念,用户可以选择需要的功能模块进行集成,也可以根据自己的业务需求进行扩展。若依框架

    2024年02月12日
    浏览(57)
  • SpringBoot实现WebSocket发送接收消息 + Vue实现SocketJs接收发送消息

    1、https://www.mchweb.net/index.php/dev/887.html 2、https://itonline.blog.csdn.net/article/details/81221103?spm=1001.2101.3001.6661.1utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~default-1-81221103-blog-121078449.pc_relevant_aadepth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~default-1-81221103-blog-12107

    2024年02月05日
    浏览(47)
  • 【c语言】详解c语言#预处理期过程 | 宏定义前言

    c语言系列专栏: c语言之路重点知识整合   创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡𖥦)!!  主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ 代码编译到执

    2024年02月01日
    浏览(52)
  • java实现钉钉自定义机器人发送消息

           钉钉作为现在很多企业的移动办公平台,具有很多很强大的功能,可以帮助我们更加及时的发现问题,解决问题,今天我们做一个java实现钉钉自定义机器发送消息的功能。         首先,先放出官方文档地址:https://open.dingtalk.com/document/orgapp/custom-robot-access        

    2024年02月15日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包