SpringBoot结合kaptcha生成图片验证码详解

 更新时间:2026年01月16日 10:19:54   作者:fate急速出击  
这篇文章主要为大家详细介绍了SpringBoot如何结合kaptcha实现图片验证码功能,文中的示例代码讲解详细,有需要的小伙伴可以参考一下

kaptcha 是一个扩展自 simplecaptcha 的验证码库,默认情况下,Kaptcha非常易于设置和使用,并且默认输出会产生一个很难验证的验证码。默认情况下,它生成的验证码看起来与上面的非常相似。如果您想更改输出的外观,则有几个配置选项,并且该框架是模块化的,因此您可以编写自己的变形代码

1.添加依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>kaptcha-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>

2.代码示例

配置类

import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

/**
 * @auther:Wangxl
 * @Emile:18335844494@163.com
 * @Time:2021/8/2 10:47
 */
@Configuration
public class CaptchaConfig {
    /**
     * 验证码配置
     * Kaptcha配置类名
     *
     * @return
     */
    @Bean
    @Qualifier("captchaProducer")
    public DefaultKaptcha kaptcha() {
        DefaultKaptcha kaptcha = new DefaultKaptcha();
        Properties properties = new Properties();
        //验证码个数
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
        //字体间隔
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_SPACE,"8");
        //干扰线颜色
        properties.setProperty(Constants.KAPTCHA_NOISE_COLOR,"red");
        //干扰实现类
        properties.setProperty(Constants.KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.DefaultNoise");
//        properties.setProperty(Constants.KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise");
        //图片样式
        properties.setProperty(Constants.KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.WaterRipple");
        //文字来源
        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_STRING, "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM");
        Config config = new Config(properties);
        kaptcha.setConfig(config);
        return kaptcha;
    }
}

service

package wxl.top.service;

import wxl.top.util.JsonData;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @auther:Wangxl
 * @Emile:18335844494@163.com
 * @Time:2021/8/2 11:44
 */
public interface CaptchaService {

    void getCaptcha(HttpServletRequest request, HttpServletResponse response);

}

impl

@Service
public class CaptchaServiceImpl implements CaptchaService {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Autowired
    private Producer captchaProducer;

    @Override
    public void getCaptcha(HttpServletRequest request, HttpServletResponse response) {
        String captchaText = captchaProducer.createText();

        String key = getCaptchaKey(request);

        //五分钟过期
        redisTemplate.opsForValue().set(key,captchaText,5, TimeUnit.MINUTES);

        BufferedImage bufferedImage = captchaProducer.createImage(captchaText);

        ServletOutputStream outputStream = null;
        try {
            outputStream = response.getOutputStream();
            ImageIO.write(bufferedImage,"jpg",outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
private String getCaptchaKey(HttpServletRequest httpServletRequest){
   String ipAddr = CommonUtil.getIpAddr(httpServletRequest);
   String userAgent = httpServletRequest.getHeader("User-Agent");
   String key = "user-service:captcha:"+CommonUtil.MD5(ipAddr+userAgent);
   return key;
}

controller

@RestController
@RequestMapping("captcha")
public class CaptchaController {

    @Autowired
    private CaptchaService captchaService;

    @GetMapping(value = "get_captcha")
    public void getCaptcha(HttpServletRequest request, HttpServletResponse response){
        captchaService.getCaptcha(request,response);
    }
}

3.演示

到此这篇关于SpringBoot结合kaptcha生成图片验证码详解的文章就介绍到这了,更多相关SpringBoot kaptcha图片验证码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaSwing后台播放音乐mp3

    JavaSwing后台播放音乐mp3

    这篇文章主要为大家详细介绍了JavaSwing后台播放音乐mp3,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Java中包的概念和用法实战案例分析

    Java中包的概念和用法实战案例分析

    这篇文章主要介绍了Java中包的概念和用法,结合具体案例形式分析了java包的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-09-09
  • Java数据存储的“双子星”对决(Map和Set的区别)

    Java数据存储的“双子星”对决(Map和Set的区别)

    文章主要介绍了Java中Map和Set两种数据结构的定义、实现、方法及应用场景,Map用于存储键值对,键唯一,值可重复;Set用于存储唯一元素,无序,两者都提供了丰富的操作方法,如添加、删除、查找等,感兴趣的朋友一起看看吧
    2025-02-02
  • TOMCAT内存溢出及大小调整的实现方法

    TOMCAT内存溢出及大小调整的实现方法

    下面小编就为大家带来一篇TOMCAT内存溢出及大小调整的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 基于JVM 中常见垃圾收集算法介绍

    基于JVM 中常见垃圾收集算法介绍

    下面小编就为大家分享一篇基于JVM 中常见垃圾收集算法介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Java并发编程之Java内存模型

    Java并发编程之Java内存模型

    这篇文章主要为大家介绍了Java内存模型,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助,希望能够给你带来帮助
    2021-11-11
  • Spring框架基于xml实现自动装配流程详解

    Spring框架基于xml实现自动装配流程详解

    自动装配就是指 Spring 容器在不使用 <constructor-arg> 和<property> 标签的情况下,可以自动装配(autowire)相互协作的 Bean 之间的关联关系,将一个 Bean 注入其他 Bean 的 Property 中
    2022-11-11
  • Java日常练习题,每天进步一点点(2)

    Java日常练习题,每天进步一点点(2)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • javaSE泛型、反射与注解的核心原理与实际应用

    javaSE泛型、反射与注解的核心原理与实际应用

    在日常开发中,必不可少的会使用到泛型,这篇文章主要介绍了javaSE泛型、反射与注解的核心原理与实际应用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-08-08
  • SpringBoot构建Docker镜像的实现步骤

    SpringBoot构建Docker镜像的实现步骤

    本文主要介绍了SpringBoot构建Docker镜像的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-05-05

最新评论