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.效果:
相关推荐
蜗牛互联网6 分钟前
Python + JSON Schema 实现工单结构化输出与本地复核
java·人工智能·后端
逐光者93311 分钟前
STM32——SPI 屏 · Flash · 高速
java·前端·stm32
wuminyu23 分钟前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
Sarvartha32 分钟前
内部类知识
java·开发语言
Knight_AL35 分钟前
从 EasyExcel 到 Apache Fesod:Java Excel 处理生态的一次重构
java·apache·excel
yuniko-n40 分钟前
【JUC】集合线程安全
java
starzy19902 小时前
Flink SlotManager启动流程源码深度剖析:从ResourceManager到Slot分配的完整链路
java·大数据·flink
极光通讯2 小时前
服务器内存来料检验(IQC)实操:批次追溯、外观判定与上机验证
java·服务器·算法
4SAPI2 小时前
AI API Gateway平台哪个好?从架构视角看企业多模型网关选型与实践
java·大数据·人工智能·gateway·php
EatFan2 小时前
2026 后端 AI 工程化:Spring AI 2.0、MCP 协议与 Agent 内嵌如何收进 Java 生产系统
java·人工智能·spring·agent·spring ai·spring boot 3·mcp