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图片验证码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 内存模型(JVM)

    Java 内存模型(JVM)

    本文公国讲解Java 内存模型来看看解决可见性、有序性问题的 Java 内存模型(JMM),今天通过本文给大家介绍Java 内存模型(JVM)的相关知识,感兴趣的朋友一起看看吧
    2021-08-08
  • Java 完美判断中文字符的方法

    Java 完美判断中文字符的方法

    Java判断一个字符串是否有中文一般情况是利用Unicode编码正则来做判断,但是其实这个区间来判断中文不是非常精确,以下是比较完善的判断方法
    2013-02-02
  • Java实现Map遍历key-value的四种方法

    Java实现Map遍历key-value的四种方法

    本文主要介绍了Java实现Map遍历key-value的四种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java聊天室之使用Socket实现通信功能

    Java聊天室之使用Socket实现通信功能

    这篇文章主要为大家详细介绍了Java简易聊天室之使用Socket实现通信功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以了解一下
    2022-10-10
  • 教你从头开始用JAVA创建一个自己的简单API并实现第三方调用

    教你从头开始用JAVA创建一个自己的简单API并实现第三方调用

    在日常开发的时候,经常会遇到需要调用别人的接口的场景,下面这篇文章主要给大家介绍了关于如何从头开始用JAVA创建一个自己的简单API并实现第三方调用的相关资料,需要的朋友可以参考下
    2023-12-12
  • SpringMVC文件上传功能实例解析

    SpringMVC文件上传功能实例解析

    这篇文章主要介绍了SpringMVC文件上传功能实例解析,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • Java发送http请求调用第三方接口获取token方式

    Java发送http请求调用第三方接口获取token方式

    这篇文章主要介绍了Java发送http请求调用第三方接口获取token方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • openfeign使用nacos服务注册方式调用的实现

    openfeign使用nacos服务注册方式调用的实现

    文章说明如何将项目注册到Nacos,使OpenFeign调用时通过服务名自动发现服务,无需手动配置URL,需添加Nacos和Sentinel依赖,启动类使用@FeignClient注解并指定fallback,服务名称直接填入value属性即可实现动态调用
    2025-09-09
  • Java接口测试之日志框架Logback的具体使用

    Java接口测试之日志框架Logback的具体使用

    本文主要介绍了Java接口测试之日志框架Logback的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • springboot环境下配置使用sqlite数据库方式

    springboot环境下配置使用sqlite数据库方式

    这篇文章主要介绍了springboot环境下配置使用sqlite数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05

最新评论