使用Kaptcha生成验证码

文章介绍了Kaptcha这个可高度配置的验证码生成库,包括其在Maven中的依赖、配置文件的设置,以及如何在控制器中生成和返回验证码。示例代码展示了如何自定义验证码的样式、尺寸、颜色等属性,以及如何通过Base64编码返回验证码图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

Kaptcha 是一个可高度配置的实用验证码生成工具,可自由配置的选项如:

  • 验证码的字体
  • 验证码字体的大小
  • 验证码字体的字体颜色
  • 验证码内容的范围(数字,字母,中文汉字!)
  • 验证码图片的大小,边框,边框粗细,边框颜色
  • 验证码的干扰线
  • 验证码的样式(鱼眼样式、3D、普通模糊、…)

示例

Maven依赖

<dependency>
    <groupId>com.github.penggle</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3.2</version>
</dependency>

kaptcha配置文件

@Component
public class KaptchConfig {
    @Bean
    public DefaultKaptcha getDefaultKaptcha() {
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        Properties properties = new Properties();
        // 图片边框
        properties.setProperty("kaptcha.border", "no");
        // 边框颜色
        properties.setProperty("kaptcha.border.color", "black");
        //边框厚度
        properties.setProperty("kaptcha.border.thickness", "1");
        // 图片宽
        properties.setProperty("kaptcha.image.width", "120");
        // 图片高
        properties.setProperty("kaptcha.image.height", "60");
        //图片实现类
        properties.setProperty("kaptcha.producer.impl", "com.google.code.kaptcha.impl.DefaultKaptcha");
        //文本实现类
        properties.setProperty("kaptcha.textproducer.impl", "com.google.code.kaptcha.text.impl.DefaultTextCreator");
        //文本集合,验证码值从此集合中获取
        properties.setProperty("kaptcha.textproducer.char.string", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
        //验证码长度
        properties.setProperty("kaptcha.textproducer.char.length", "4");
        //字体
        properties.setProperty("kaptcha.textproducer.font.names", "Arial,Courier");
        //字体颜色
        properties.setProperty("kaptcha.textproducer.font.color", "black");
        //文字间隔
        properties.setProperty("kaptcha.textproducer.char.space", "4");
        //干扰实现类
        properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.DefaultNoise");
        //干扰颜色
        properties.setProperty("kaptcha.noise.color", "blue");
        //干扰图片样式
        properties.setProperty("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.WaterRipple");
        //背景实现类
        properties.setProperty("kaptcha.background.impl", "com.google.code.kaptcha.impl.DefaultBackground");
        //背景颜色渐变,结束颜色
        properties.setProperty("kaptcha.background.clear.to", "white");
        //文字渲染器
        properties.setProperty("kaptcha.word.impl", "com.google.code.kaptcha.text.impl.DefaultWordRenderer");
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }

}

控制器

@RestController
@RequestMapping("/test/kaptch")
public class KaptchController {
    @Resource
    private DefaultKaptcha defaultKaptcha;

    /**
     * 生成验证码
     * @return
     * @throws IOException
     */
    @RequestMapping("/code")
    public ResultBean<String> code() throws IOException {
        // 生成文字验证码
        String text = defaultKaptcha.createText();
        System.out.println("文字验证码为" + text);
        // 生成图片验证码
        BufferedImage image = defaultKaptcha.createImage(text);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ImageIO.write(image, "jpg", out);
        // 对字节组Base64编码
        return ResultBeanUtil.success(Base64.getEncoder().encodeToString(out.toByteArray()));
    }

}

测试

{
    "code": 200,
    "msg": "成功",
    "data": "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"
}

随意找一个在线base64字符串转图片的网站,将上面测试结果中的data值拷贝到网页中进行测试
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁云亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值