SpringBoot集成图片验证码框架easy-captcha的详细过程
作者:shy好好学习
本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是一款轻量级的开源验证码框架,通过简洁的API和高度可定制性,可以快速实现验证码功能,文章详细介绍了如何配置、生成和展示验证码,并提供了Easy-Captcha的GitHub地址
SpringBoot集成图片验证码框架easy-captcha
此项目已经很久未维护,如有更好的选择,建议使用更好的选择!!!
一、引言
验证码(CAPTCHA)是现代应用中防止机器人攻击、保护接口安全的核心手段之一。然而,从零开发验证码模块需要处理图形渲染、算法设计、安全防护等诸多复杂问题。Easy-Captcha 作为一款轻量级开源验证码框架,以简洁的API和高度可定制性成为开发者的优选方案。下面我们将介绍如何将Easy-Captcha框架整合到SpringBoot项目中。
二、依赖
<dependency> <groupId>com.github.whvcse</groupId> <artifactId>easy-captcha</artifactId> <version>1.6.2</version> </dependency>
三、代码
1. EasyCaptcha配置类
我们可以修改EasyCaptchaTypeEnum的枚举值来使用不同的验证码类型
@Configuration @Data public class EasyCaptchaConfig { /** * 验证码类型 */ private EasyCaptchaTypeEnum type = EasyCaptchaTypeEnum.GIF; /** * 验证码缓存过期时间(单位:秒) */ private long ttl = 120L; /** * 验证码内容长度 */ private int length = 4; /** * 验证码宽度 */ private int width = 120; /** * 验证码高度 */ private int height = 36; /** * 验证码字体 */ private String fontName = "Verdana"; /** * 字体风格 */ private Integer fontStyle = Font.PLAIN; /** * 字体大小 */ private int fontSize = 20; }
2. EasyCaptchaTypeEnum枚举类
/** * @desc: EasyCaptcha 验证码类型枚举 * @author: shy * @date: 2025/02/27 16:55 */ public enum EasyCaptchaTypeEnum { /** * 算数 */ ARITHMETIC, /** * 中文 */ CHINESE, /** * 中文闪图 */ CHINESE_GIF, /** * 闪图 */ GIF, /** * png格式验证码 */ SPEC }
3. 验证码生成器
/** * @desc: 验证码生成器 * @author: shy * @date: 2025/02/27 16:59 */ @Component @RequiredArgsConstructor public class EasyCaptchaProducer { private final EasyCaptchaConfig captchaConfig; public Captcha getCaptcha() { Captcha captcha; int width = captchaConfig.getWidth(); int height = captchaConfig.getHeight(); int length = captchaConfig.getLength(); String fontName = captchaConfig.getFontName(); switch (captchaConfig.getType()) { case ARITHMETIC: captcha = new ArithmeticCaptcha(width, height); //固定设置为两位,图片为算数运算表达式 captcha.setLen(2); break; case CHINESE: captcha = new ChineseCaptcha(width, height); captcha.setLen(length); break; case CHINESE_GIF: captcha = new ChineseGifCaptcha(width, height); captcha.setLen(length); break; case GIF: captcha = new GifCaptcha(width, height);//最后一位是位数 captcha.setLen(length); break; case SPEC: captcha = new SpecCaptcha(width, height); captcha.setLen(length); break; default: throw new RuntimeException("验证码配置信息错误!正确配置查看 CaptchaTypeEnum "); } // 使用默认字体即可解决中文乱码问题 captcha.setFont(new Font(fontName, captchaConfig.getFontStyle(), captchaConfig.getFontSize())); return captcha; } }
4. 验证码生成Service
/** * @desc: EasyCaptcha 业务类 * @author: shy * @date: 2025/02/27 17:02 */ @Component @RequiredArgsConstructor public class EasyCaptchaService { private final EasyCaptchaProducer easyCaptchaProducer; private final EasyCaptchaConfig captchaConfig; /** * 获取EasyCaptcha图片验证码 * * @param * @return Captcha * @throws * @author shy * @date 2025/02/27 22:18 */ public Captcha getCaptcha() { // 获取验证码 Captcha captcha = easyCaptchaProducer.getCaptcha(); // 验证码文本 String captchaText = captcha.text(); // todo 验证码文本存储Redis比对 System.out.println("验证码文本:" + captchaText); return captcha; } }
5. 对外接口
@GetMapping("/getEasyCaptcha") @ApiOperation(value = "获取EasyCaptcha图片验证码", notes = "获取EasyCaptcha图片验证码", httpMethod = "GET") public void getEasyCaptcha() { Captcha captcha = captchaService.getCaptcha(); try { captcha.out(response.getOutputStream()); // 以上两种方式都可以输出图片验证码 //CaptchaUtil.out(captcha, request, response); } catch (IOException e) { throw new RuntimeException(); } super.getEasyCaptcha(); }
四、验证码展示
动态验证码
中文验证码
png格式验证码
五、总结
Easy-Captcha 通过模块化设计平衡了安全性与开发效率,其源码结构清晰(仅核心类约15个),适合二次开发。无论是快速实现基础验证功能,还是构建企业级人机验证系统,该框架都能提供可靠支持。建议结合具体业务需求,在验证码样式、验证流程上做深度定制。
GitHub 地址:https://github.com/whvcse/EasyCaptcha
到此这篇关于SpringBoot集成图片验证码框架easy-captcha的文章就介绍到这了,更多相关SpringBoot验证码easy-captcha内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!