Java后端图形验证码的使用实例代码

 更新时间:2025年04月30日 08:59:16   作者:小陈09  
这篇文章主要介绍了Java后端图形验证码的相关资料,通过示例代码讲解了如何使用Kaptcha库生成验证码,并通过Base64编码传输给前端,前端将验证码文本发送到后端进行验证,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、验证码使用逻辑

二、生成验证码

使用Kaptcha库生成验证码

这里使用的是后端调用Kaptcha库生成验证码的二进制字符串,传给前端,由前端转为图片

1、引入依赖

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

2、生成验证码

// 生成验证码
String code = kaptchaProducer.createText();

3、根据文本生成验证码图片(BufferedImage对象)

BufferedImage kaptchaImage = kaptchaProducer.createImage(code);

4、将图片转换为Base64

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(kaptchaImage, "jpg", outputStream);
String base64Img = Base64.getEncoder().encodeToString(outputStream.toByteArray());

ByteArrayOutputStream:内存输出流,用于临时存储图片二进制数据。

ImageIO.write:将BufferedImage以JPEG格式写入输出流。

Base64编码:将二进制图片数据转换为Base64字符串,便于前端通过直接显示。

5、构造返回前端的响应

Map<String, String> imgMap = new HashMap<>();
imgMap.put(key, "data:image/jpeg;base64," + base64Img);

返回值格式:生成一个键值对,例如:

{ "captchaKey": "data:image/jpeg;base64,/9j/4AAQSkZJRgA..." }

key的作用:前端提交验证码时需携带此键,服务端通过它从缓存中获取正确的验证码文本。

6、缓存验证码

Map<String, String> cacheMap = new HashMap<>();
cacheMap.put(CODE, code.toUpperCase());
captchaCache.putCaptcha(key, cacheMap);

Google Guava 缓存库实现的验证码缓存组件,用于在单节点部署环境中存储和验证验证码信息。

  • 转换为大写:code.toUpperCase()使验证码不区分大小写(用户输入a3g7或A3G7均可通过)。
  • 缓存逻辑:
  •  CODE是常量(如"code"),作为缓存Map的键。
  •  captchaCache是自定义缓存组件,将key与验证码文本关联,通常设置有效期
@Override
public boolean putCaptcha(String key, Map<String, String> value) {
    try {
        cache.put(key, JSONObject.fromObject(value).toString());
    } catch (Exception ex) {
        return false;
    }
    return true;
}

三、验证验证码

一般在调用登录接口前验证验证码,通过SpringMVC的拦截器实现

1、验证验证码,判断是否为空

		if(StringUtil.isEmpty(key)) {
			throw new BadRequestAlertException(ErrorConstants.CAPTCHA_TYPE, "The information of captcha is missing", "captcha.header", "missing");
		}

2、获取验证码(如果验证码过期则无法获取到)

Map<String, String> validateMap = captchaCache.getCaptcha(key);

3、删除验证码缓存

captchaCache.deleteCaptcha(key);

4、比较验证码的值

		if(captcha.get(CODE).equalsIgnoreCase(validateMap.get(CODE))){
			return true;
		}

总结 

到此这篇关于Java后端图形验证码使用的文章就介绍到这了,更多相关Java后端图形验证码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 通过JDBC连接oracle数据库的十大技巧

    通过JDBC连接oracle数据库的十大技巧

    通过JDBC连接oracle数据库的十大技巧...
    2006-12-12
  • Mybatis-Plus中update()和updateById()将字段更新为null

    Mybatis-Plus中update()和updateById()将字段更新为null

    本文主要介绍了Mybatis-Plus中update()和updateById()将字段更新为null,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • lombok的@EqualsAndHashcode注解详解

    lombok的@EqualsAndHashcode注解详解

    这篇文章主要介绍了lombok的@EqualsAndHashcode注解的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • 解析HashMap中的put方法执行流程

    解析HashMap中的put方法执行流程

    在Java集合中,HashMap的重要性不言而喻,作为一种存储键值对的数据结构,它在日常开发中有着非常多的应用场景,也是面试中的高频考点,本篇文章就来分析一下HashMap集合中的put方法
    2021-12-12
  • SpringBoot中HTTP请求不通的原因级解决方法

    SpringBoot中HTTP请求不通的原因级解决方法

    HTTP 请求是指从客户端到服务器的请求消息,对于一个 Spring Boot 项目而言,服务器就是 Spring Boot,客户端就是用户本地的浏览器,但是会遇到SpringBoot HTTP请求不通的问题,本文介绍了一些常见问题及解决方法,需要的朋友可以参考下
    2025-02-02
  • Dubbo之降级Mock源码分析

    Dubbo之降级Mock源码分析

    这篇文章主要为大家介绍了Dubbo降级Mock源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 解决idea的debug模式突然变卡,项目启动变慢的状况

    解决idea的debug模式突然变卡,项目启动变慢的状况

    这篇文章主要介绍了解决idea的debug模式突然变卡,项目启动变慢的状况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • IntelliJ IDEA像Eclipse一样打开多个项目的图文教程

    IntelliJ IDEA像Eclipse一样打开多个项目的图文教程

    这篇文章主要介绍了IntelliJ IDEA像Eclipse一样打开多个项目的方法图文教程讲解,需要的朋友可以参考下
    2018-03-03
  • Java 添加超链接到 Word 文档方法详解

    Java 添加超链接到 Word 文档方法详解

    这篇文章主要介绍了Java 添加超链接到 Word 文档方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 详解Spring MVC/Boot 统一异常处理最佳实践

    详解Spring MVC/Boot 统一异常处理最佳实践

    在 Web 开发中, 我们经常会需要处理各种异常,这篇文章主要介绍了详解Spring MVC/Boot 统一异常处理最佳实践,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01

最新评论