Spring Boot2.7生成用于登录的图片验证码

先在 pom.xml 注入依赖

xml 复制代码
<dependency>
    <groupId>com.github.penggle</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3.2</version>
</dependency>

然后 需要在配置文件中声明一下DefaultKaptcha 的 bean对象

然后 我们随便找个目录创建一个类 叫CaptchaGenerator.java

专门处理生成验证码的逻辑

java 复制代码
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Properties;

@Component
public class CaptchaGenerator {

    private DefaultKaptcha defaultKaptcha;

    @Autowired
    public CaptchaGenerator(DefaultKaptcha defaultKaptcha) {
        this.defaultKaptcha = defaultKaptcha;
    }

    public byte[] generateCaptchaImage(String captchaText) throws IOException {
        Properties properties = new Properties();
        properties.setProperty("kaptcha.textproducer.char.string", "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
        properties.setProperty("kaptcha.textproducer.char.length", "4");

        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);

        BufferedImage captchaImage = defaultKaptcha.createImage(captchaText);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ImageIO.write(captchaImage, "jpg", outputStream);

        return outputStream.toByteArray();
    }
}

然后 在写接口的类中 声明一下CaptchaGenerator 的对象

注意 这里要用构造方法赋值

否则东西会拿不到

java 复制代码
private CaptchaGenerator captchaGenerator;

@Autowired
public BookController(CaptchaGenerator captchaGenerator) {
    this.captchaGenerator = captchaGenerator;
}

最后 编写函数

javascript 复制代码
@GetMapping(value = "/captcha", produces = MediaType.IMAGE_JPEG_VALUE)
public void getCaptchaImage(HttpServletResponse response) throws IOException {
    String captchaText = "3922";// 生成验证码文本
    byte[] captchaImage = captchaGenerator.generateCaptchaImage(captchaText);

    response.setContentType(MediaType.IMAGE_JPEG_VALUE);
    response.getOutputStream().write(captchaImage);
    response.getOutputStream().flush();
}

然后 我们直接访问 端口+接口前缀/captcha 即可访问到验证码

这里 我设置的验证码内容是 3922 你们可以根据情况修改 一般都是随机的

相关推荐
SL_staff5 分钟前
4G设备掉线三层归因指南:SIM卡、模组、JVS-IOT网关配置精准锁定
java·物联网·产品
leeyi6 分钟前
缓存同步之后,还要考虑没收到消息的节点
后端·性能优化·erlang
IT_陈寒23 分钟前
Redis的原子性竟然失效了?记一次分布式锁翻车实录
前端·人工智能·后端
shengjk135 分钟前
既然 gRPC 底层也是 HTTP,为什么大厂还非要死磕 RPC?真相全在这!
后端
回家路上绕了弯37 分钟前
人和 Agent 怎么一起干活:把任务交出去,把判断留在关键处
后端
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 黑名单:取消黑名单
java·windows·交友
波力海苔夹心脆6751 小时前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
杨杨杨大侠1 小时前
DeepSeek Harness:连 Agent Loop 都能替换的插件架构
java·人工智能·agent
SL_staff1 小时前
私有化低代码运维三重雷区:JVS开源栈中的Kafka/ES/RabbitMQ治理实践
java·低代码·全栈
yuniko-n1 小时前
【算法】约瑟夫环问题
java·算法