小工具知识网

当前位置: 首页 > 行业知识 > Spring Boot工程集成验证码生成与验证功能教程

行业知识

Spring Boot工程集成验证码生成与验证功能教程

2026-11-10 16:58:09 来源:互联网转载

前言

���迎来到我的技术小宇宙! 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。

  • 洛可可白:个人主页

  • 个人专栏:✅前端技术 ✅后端技术

  • 个人博客:洛可可白博客

  • 代码获取:bestwishes0203

  • 封面壁纸:洛可可白wallpaper

    文章目录

    • Spring Boot工程集成验证码生成与验证功能教程
      • 1. 创建验证码工具类
      • 2. 控制层实现
      • 3. 客户端展示验证码
      • 4. 验证验证码
      • 联系方式
      • 获取源代码
      • 结语

        Spring Boot工程集成验证码生成与验证功能教程

        验证码是一种常见的安全机制,用于防止自动化工具(如爬虫)对网站进行恶意操作。在Web应用中,验证码通常以图像的形式出现,要求用户输入图像中显示的字符。本文将介绍如何在Spring Boot工程中实现一个随机生成验证码的功能。

        1. 创建验证码工具类

        首先,我们需要创建一个工具类VerifyCodeUtils,用于生成随机验证码并输出为图像。

        import javax.imageio.ImageIO;import java.awt.*;import java.awt.geom.AffineTransform;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.Arrays;import java.util.Random;public class VerifyCodeUtils {    //使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符    public static final String VERIFY_CODES = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";    private static Random random = new Random();    /**     * 使用系统默认字符源生成验证码     *     * @param verifySize 验证码长度     * @return     */    public static String generateVerifyCode(int verifySize) {        return generateVerifyCode(verifySize, VERIFY_CODES);    }    /**     * 使用指定源生成验证码     *     * @param verifySize 验证码长度     * @param sources    验证码字符源     * @return     */    public static String generateVerifyCode(int verifySize, String sources) {        if (sources == null || sources.length() == 0) {            sources = VERIFY_CODES;        }        int codesLen = sources.length();        Random rand = new Random(System.currentTimeMillis());        StringBuilder verifyCode = new StringBuilder(verifySize);        for (int i = 0; i  255)            fc = 255;        if (bc > 255)            bc = 255;        int r = fc + random.nextInt(bc - fc);        int g = fc + random.nextInt(bc - fc);        int b = fc + random.nextInt(bc - fc);        return new Color(r, g, b);    }    private static int getRandomIntColor() {        int[] rgb = getRandomRgb();        int color = 0;        for (int c : rgb) {            color = color         int[] rgb = new int[3];        for (int i = 0; i  1)                    * Math.sin((double) i / (double) period                    + (6.2831853071795862D * (double) phase)                    / (double) frames);            g.copyArea(0, i, w1, 1, (int) d, 0);            if (borderGap) {                g.setColor(color);                g.drawLine((int) d, i, 0, i);                g.drawLine((int) d + w1, i, w1, i);            }        }    }    private static void shearY(Graphics g, int w1, int h1, Color color) {        int period = random.nextInt(40) + 10; // 50;        boolean borderGap = true;        int frames = 20;        int phase = 7;        for (int i = 0; i > 1)                    * Math.sin((double) i / (double) period                    + (6.2831853071795862D * (double) phase)                    / (double) frames);            g.copyArea(i, 0, 1, h1, 0, (int) d);            if (borderGap) {                g.setColor(color);                g.drawLine(i, (int) d, i, 0);                g.drawLine(i, (int) d + h1, i, h1);            }        }    }}

        2. 控制层实现

        在Spring Boot的控制器中,我们需要提供一个接口来生成验证码并将其发送给客户端。

        // VerifyController.javaimport javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class VerifyController {    @GetMapping("https://blog.csdn.net/generateImageCode")    public void generateImageCode(HttpSession session, HttpServletResponse response) throws IOException {        //随机生成四位随机数        String code = VerifyCodeUtils.generateVerifyCode(4);        //保存到session域中        session.setAttribute("code", code);        //根据随机数生成图片,reqponse响应图片        response.setContentType("image/png");        ServletOutputStream os = response.getOutputStream();        VerifyCodeUtils.outputImage(130, 60, os, code);    }}

        3. 客户端展示验证码

        在Web页面中,我们需要添加一个图像标签来展示验证码。

         

        4. 验证验证码

        在用户提交表单时,我们需要验证用户输入的验证码是否正确。这通常在后端进行,通过比较用户输入的验证码与Session中保存的验证码。

        // 在登录方法中验证验证码@PostMapping("/login")public ResponseEntity login(@RequestParam String username, @RequestParam String password, HttpSession session) {    // 获取用户输入的验证码    String userInputCode = request.getParameter("code");    // 获取Session中保存的验证码    String sessionCode = (String) session.getAttribute("code");    // 验证验证码    if (!sessionCode.equals(inputCode)) {        // 验证码错误        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("验证码错误");    }    // 验证码正确,继续登录逻辑    // ...}

        联系方式

        如果您对我们的项目感兴趣,或者有任何技术问题想要探讨,欢迎通过以下方式与我联系。我非常期待与您交流,共同学习,共同进步!

        • 邮箱:2109664977@qq.com
        • Gitee:https://gitee.com/bestwishes0203
        • GitHub:https://github.com/bestwishes0203
        • CSDN主页:https://blog.csdn.net/interest_ing_/
        • 个人博客:访问我的博客

          获取源代码

          • 后端案例:https://gitee.com/bestwishes0203/Front-end-example
          • 前端案例:https://gitee.com/bestwishes0203/Back-end-example

            结语

            感谢你的访问,如果你对我的技术文章或项目感兴趣,欢迎通过以上方式与我联系。让我们一起在技术的道路上不断前行!

上一篇:【axios】拦截器:axios.interceptors.request.use|axios.interceptors.response.use

下一篇:云服务器怎么配置主页地址?