一、Hutool-captcha 核心优势
-
开箱即用:内置线段、圆圈、扭曲、GIF等多种验证码类型,支持纯数字、字母、汉字甚至四则运算内容 。
-
零侵入性:无需复杂配置,通过静态方法直接调用,完美兼容Spring Boot、Servlet等框架 。
-
安全增强:动态刷新、干扰线/点、内容加密等机制,有效对抗OCR识别和暴力破解 。
二、快速集成:4步生成验证码
步骤1:引入依赖(Maven)
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-captcha</artifactId>
<version>最新版本</version> <!-- 推荐使用最新稳定版 -->
</dependency>
步骤2:生成验证码(以线段干扰为例)
// 创建验证码(宽、高、字符数、干扰线数量)
LineCaptcha captcha = CaptchaUtil.createLineCaptcha(200, 100, 4, 50);
// 输出到文件或流
captcha.write("path/to/captcha.png");
// 获取验证码文本(需存储至Session或Redis)
String code = captcha.getCode();
步骤3:前端渲染(Vue示例)
<img :src="captchaUrl" @click="refreshCaptcha" />
<script>
// 动态请求后端接口获取验证码图片(Blob格式)
const refreshCaptcha = async () => {
const res = await axios.get("/api/captcha", { responseType: "blob" });
captchaUrl.value = URL.createObjectURL(res.data);
};
</script>
步骤4:后端校验
// 用户提交时校验
boolean isValid = captcha.verify(userInputCode);
// Spring Boot中可通过Session或Token绑定验证码
@PostMapping("/login")
public ResponseEntity<?> login(@RequestParam String code, HttpSession session) {
String storedCode = (String) session.getAttribute("CAPTCHA");
if (!code.equalsIgnoreCase(storedCode)) {
throw new RuntimeException("验证码错误");
}
// 校验通过,执行业务逻辑
}
三、高级用法:定制你的验证码
1. 四则运算验证码(适合高安全场景)
ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(200, 45, 4, 4);
captcha.setGenerator(new MathGenerator()); // 生成如 "3+5=?"
2. 圆圈干扰验证码
CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(400, 400, 4, 20);
3. GIF动态验证码(增加识别难度)
GifCaptcha captcha = CaptchaUtil.createGifCaptcha(200, 100, 4);
四、安全最佳实践
-
限制验证码使用频率:同一IP/用户每分钟最多请求3次,防止暴力刷新 。
-
动态难度调整:根据风控等级自动增加干扰线数量或切换验证码类型 。
-
验证码生命周期:设置2-5分钟过期时间,避免长期有效导致重放攻击 。
五、总结
Hutool-captcha 以“工具库”的轻量级设计,解决了验证码开发中的三大痛点:代码冗余、安全性低、维护成本高。无论是单体应用还是微服务架构,只需简单调用API,即可为系统筑牢第一道安全防线。