SpringBoot项目中集成Kaptcha

1.Kaptcha简介

Kaptcha是一个流行的Java库,用于生成验证码(CAPTCHA)图片。CAPTCHA是"Completely Automated Public Turing test to tell Computers and Humans Apart"的缩写,通常用于在线表单验证以防止机器人或自动化工具的滥用,保护网站不被自动注册帐户、发送垃圾邮件等使用。

Kaptcha提供了易于使用的方法来快速集成和产生各种风格的验证码图片,它支持自定义字体、文字颜色、大小以及添加的噪声等级等,从而使得验证码看起来多种多样并且对机器具有一定的识别难度。它在Spring框架中也非常容易整合。

2.SpringBoot项目中引入Kaptcha

2.1.引入依赖
复制代码
<!-- Kaptcha 生成随机字符、生成图片(生成用于验证码)-->
<dependency>
    <groupId>com.oopsguy.kaptcha</groupId>
    <artifactId>kaptcha-spring-boot-starter</artifactId>
    <version>1.0.0-beta-2</version>
</dependency>
2.2.配置工具类
复制代码
package com.duhong.util;
import com.google.code.kaptcha.Producer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;
@Component
public class KaptchaProducerUtil {
    @Autowired
    private Producer producer;

    public  String createText(){
        return producer.createText();
    }
    public BufferedImage createImage(String text){
        // 生成初始图像
        BufferedImage captchaImage = producer.createImage(text);

        //获取图像的画笔以便添加干扰线
        Graphics2D g2d = captchaImage.createGraphics();

        //设置干扰线的颜色
        g2d.setColor(Color.PINK); // 或者你可以使用其他颜色

        //设置干扰线的笔触,使线条更粗
        g2d.setStroke(new BasicStroke(3)); // 2 是线条的宽度

        //随机生成干扰线的起点和终点坐标
        Random random = new Random();
        int x1 = random.nextInt(captchaImage.getWidth());
        int y1 = random.nextInt(captchaImage.getHeight());
        int x2 = random.nextInt(captchaImage.getWidth());
        int y2 = random.nextInt(captchaImage.getHeight());

        //在图像上绘制线条
        g2d.drawLine(x1, y1, x2, y2);

       //绘制3条线条
        for (int i = 0; i < 3; i++) {
            x1 = random.nextInt(captchaImage.getWidth());
            y1 = random.nextInt(captchaImage.getHeight());
            x2 = random.nextInt(captchaImage.getWidth());
            y2 = random.nextInt(captchaImage.getHeight());
            g2d.drawLine(x1, y1, x2, y2);
        }

        // 释放画笔资源
        g2d.dispose();
        return captchaImage;
    }

}
2.3.测试:
复制代码
@Test
void kaptchaTest(){
    String text=producer.createText();
    BufferedImage image = producer.createImage(text);


    File outputFile = new File("C:\\Users\\bumiexiguang\\OneDrive\\桌面\\毕业设计\\output.png"); // 输出文件路径和名称
    try {
        ImageIO.write(image, "png", outputFile);
        System.out.println("Image saved successfully.");
    } catch (IOException e) {
        System.out.println("Error saving image: " + e.getMessage());
    }
}
2.4.效果:
相关推荐
小冷coding8 小时前
【Java】遇到微服务接口报错导致系统部分挂掉时,需要快速响应并恢复,应该怎么做呢?如果支付服务出现异常如何快速处理呢?
java·开发语言·微服务
+VX:Fegn08958 小时前
计算机毕业设计|基于springboot + vue酒店预订系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
一个处女座的程序猿O(∩_∩)O9 小时前
Nacos 中的 Namespace 深度解析:实现多租户隔离的关键机制
java
HeisenbergWDG9 小时前
线程实现runnable和callable接口
java·开发语言
JavaGuide9 小时前
IntelliJ IDEA 2026.1 EAP 发布!拥抱 Java 26,Spring Boot 4 深度支持!
java·后端·mysql·springboot·idea·大厂面试·javaguide
丁一郎学编程9 小时前
测试开发面经
java·开发语言
a程序小傲9 小时前
京东Java面试被问:RPC调用的熔断降级和自适应限流
java·开发语言·算法·面试·职场和发展·rpc·边缘计算
独自破碎E9 小时前
MyBatis Flex和MyBatis Plus的区别
java·开发语言·mybatis
葡萄成熟时 !9 小时前
正则表达式
java·正则表达式
无心水9 小时前
微服务架构下Dubbo线程池选择与配置指南:提升系统性能与稳定性
java·开发语言·微服务·云原生·架构·java-ee·dubbo