Java后端图形验证码的使用实例代码
目录
- 一、验证码使用逻辑
- 二、生成验证码
- 三、验证验证码
- 总结
一、验证码使用逻辑
二、生成验证码
使用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)) { thjavascriptrow new BadRequestAlertException(ErrorConstants.CAPTCHA_TYPE, "The information of captcha is missing", "captcha.header", "missing"); }
2、获取验证码(如果验证码过期则无法获取到)
Map<String, String> validateMap www.devze.com= captchaCache.getCaptcha(key);
3、删除验证码缓存
captchaCache.deleteCaptcha(key);
4、比较验证码的值
if(captcha.get(CODE).equalsIgnoreCase(validateMap.get(CODE))){ return truehttp://www.devze.com; }
总结 ythonp;
到此这篇关于Java后端图形验证码使用的文章就介绍到这了,更多相关Java后端图形验证码内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论