首页 > 其他分享 >EasyCaptcha验证码图

EasyCaptcha验证码图

时间:2024-11-05 21:11:30浏览次数:1  
标签:captcha 验证码 SpecCaptcha Captcha EasyCaptcha new FONT

EasyCaptcha

在 Java 中实现 EasyCaptcha 工具类可以生成验证码,使用图像或简单的数学问题进行验证。官方文档

引入依赖

<dependency>
    <groupId>com.github.whvcse</groupId>
    <artifactId>easy-captcha</artifactId>
</dependency>

验证码工具的API介绍

public class Test {
    
    public static void main(String[] args) {
        // png类型
        SpecCaptcha captcha = new SpecCaptcha(130, 48);
        captcha.text();  // 获取验证码的字符
        captcha.textChar();  // 获取验证码的字符数组
        
        // gif类型
        GifCaptcha captcha = new GifCaptcha(130, 48);
        
        // 中文类型
        ChineseCaptcha captcha = new ChineseCaptcha(130, 48);
        
        // 中文gif类型
        ChineseGifCaptcha captcha = new ChineseGifCaptcha(130, 48);
        
        // 算术类型
        ArithmeticCaptcha captcha = new ArithmeticCaptcha(130, 48);
        captcha.setLen(3);  // 几位数运算,默认是两位
        captcha.getArithmeticString();  // 获取运算的公式:3+2=?
        captcha.text();  // 获取运算的结果:5
        
        captcha.out(outputStream);  // 输出验证码
    }
}

注意:
 算术验证码的len表示是几位数运算,而其他验证码的len表示验证码的位数,算术验证码的text()表示的是公式的结果, 对于算术验证码,你应该把公式的结果存储session,而不是公式。

验证码字符类型

类型 描述
TYPE_DEFAULT 数字和字母混合
TYPE_ONLY_NUMBER 纯数字
TYPE_ONLY_CHAR 纯字母
TYPE_ONLY_UPPER 纯大写字母
TYPE_ONLY_LOWER 纯小写字母
TYPE_NUM_AND_UPPER 数字和大写字母

使用方法:

SpecCaptcha captcha = new SpecCaptcha(130, 48, 5);
captcha.setCharType(Captcha.TYPE_ONLY_NUMBER);

只有SpecCaptchaGifCaptcha设置才有效果。

字体设置

内置字体:

字体 效果
Captcha.FONT_1 img
Captcha.FONT_2 img
Captcha.FONT_3 img
Captcha.FONT_4 img
Captcha.FONT_5 img
Captcha.FONT_6 img
Captcha.FONT_7 img
Captcha.FONT_8 img
Captcha.FONT_9 img
Captcha.FONT_10 img

使用方法:

解释SpecCaptcha captcha = new SpecCaptcha(130, 48, 5);

// 设置内置字体
captcha.setFont(Captcha.FONT_1); 

// 设置系统字体
captcha.setFont(new Font("楷体", Font.PLAIN, 28)); 

输出base64编码

解释SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
specCaptcha.toBase64();

// 如果不想要base64的头部data:image/png;base64,
specCaptcha.toBase64("");  // 加一个空的参数即可

输出到文件

FileOutputStream outputStream = new FileOutputStream(new File("C:/captcha.png"))
SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
specCaptcha.out(outputStream);

前后端分离项目的使用

前后端分离项目建议不要存储在session中,存储在redis中,redis存储需要一个key,key一同返回给前端用于验证输入:

@Controller
public class CaptchaController {
    @Autowired
    private RedisUtil redisUtil;
    
    @ResponseBody
    @RequestMapping("/captcha")
    public JsonResult captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
        SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
        String verCode = specCaptcha.text().toLowerCase();
        String key = UUID.randomUUID().toString();
        // 存入redis并设置过期时间为30分钟
        redisUtil.setEx(key, verCode, 30, TimeUnit.MINUTES);
        // 将key和base64返回给前端
        return JsonResult.ok().put("key", key).put("image", specCaptcha.toBase64());
    }
    
    @ResponseBody
    @PostMapping("/login")
    public JsonResult login(String username,String password,String verCode,String verKey){
        // 获取redis中的验证码
        String redisCode = redisUtil.get(verKey);
        // 判断验证码
        if (verCode==null || !redisCode.equals(verCode.trim().toLowerCase())) {
            return JsonResult.error("验证码不正确");
        }
    }  
}

前端使用ajax获取验证码:

<img id="verImg" width="130px" height="48px"/>

<script>
    var verKey;
    // 获取验证码
    $.get('/captcha', function(res) {
        verKey = res.key;
        $('#verImg').attr('src', res.image);
    },'json');
    
    // 登录
    $.post('/login', {
        verKey: verKey,
        verCode: '8u6h',
        username: 'admin',
        password: 'admin'
    }, function(res) {
        console.log(res);
    }, 'json');
</script>

标签:captcha,验证码,SpecCaptcha,Captcha,EasyCaptcha,new,FONT
From: https://www.cnblogs.com/21CHS/p/18528850

相关文章

  • 小红书最新旋转验证码识别代码
    一、简介小红书又出了这种新的旋转验证码,是一种中国国画风格的图片,中间是旋转小图,并且带有随机黑色阴影。这给识别带来了很大难度。而且中间图片内容比较空旷,也给特征提取带来了难度。二、识别介绍经过我们的努力,识别这款新验证码的正确率已经达到了90%以上,大家只需要下载......
  • 设计登陆验证码的逻辑
    今日面试某信息的场景题提到了下这个问题,没太搞懂面试官具体想让我说的就是两个接口的设计,一个生成验证码,一个校验验证码,和其具体的设计方案,没听懂当时的意思,有的小懵逼,因此回头总结回顾一下,日常开发中对这些小细节还是要注重一下,不能因为场景逻辑简单就不去分析其背后的原因。设......
  • 影刀RPA实战:识别简单计算验证码
    1.官方计算验证码基于影刀AI引擎的验证码识别指令,该指令不是长期免费,有一定的免费额度,用完之后需要我们到影刀官方充值。上图使我们要识别的计算验证码影刀指令代码:配置我们选择计算题,文件路径本次指定本地图片,实际中使用网页截图保存图片地址实现演示:计算结果166......
  • 后端java——如何为你的网页设置一个验证码
    本文通过HUTOOL实现:Hutool参考文档Hutool,Java工具集https://hutool.cn/docs/#/1、工具的准备如果我们通过hutool来实现这个功能,我们需要提前安装hutool的jar包。下载地址:CentralRepository:cn/hutool/hutool-all/5.8.16 将下载好的jar包放到eclipse的lib目录,我们proje......
  • DAY75WEB 攻防-验证码安全篇&接口滥用&识别插件&复用绕过&宏命令填入&滑块类
    知识点:1、验证码简单机制-验证码过于简单可爆破2、验证码重复使用-验证码验证机制可绕过3、验证码智能识别-验证码图形码被可识别4、验证码接口调用-验证码触发接口可枚举图片验证码-识别插件-登录爆破&接口枚举验证码识别绕过等技术适用于:口令存在爆破,接口枚举调用,任意......
  • 一招帮你搞定验证码设置
    目录一、准备环境​编辑 二、配置环境三、基础方法四、验证码的一些常用类别1.LineCaptcha线段干扰的验证码(Java)2.CircleCaptcha圆圈干扰的验证码(Java)3.ShearCaptcha扭曲干扰验证码4.写出到浏览器输出5.自定义验证码CodeGenerator 五、通过实例来简述过程1.一个......
  • SpringBoot实现验证码案例
    目录实现逻辑前后端交互接口前端代码后端代码实现逻辑1、后端功能:随机生成验证码图片,并把交给前端、接收用户输入,验证用户输入的验证码是否正确、2、前端功能:显示验证码,提供输入框供用户输入他们看到的验证码,把用户输入的数据交给后端,接收后端返回的验证结果前后......
  • 自动化测试中的验证码处理
    在自动化测试中,处理验证码往往是一个挑战,尤其是图形验证码。每次刷新生成的验证码内容各不相同。获取验证码的方法通常有两种:获取验证码图片链接:例如src="http://example.com/getcaptcha/123",但这种方法有时并不可靠,因为通过链接访问的验证码可能与当前页面显示的验证码不一致。......
  • 验证码处理在自动化测试中的应用
    在进行自动化测试时,处理验证码是一项常见的挑战,特别是图形验证码。每次刷新都会生成新的验证码,因此我们可以采用以下两种方法来获取验证码:获取验证码图片链接:例如src="http://example.com/getcaptcha/123",但这种方式并不总是可靠,因为通过链接访问的验证码可能与当前页面显示的不......
  • 实干派!网易易盾增强版滑块验证码,全方位讲解识别思路(含源码)
    注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路如有侵犯,请联系作者下架某盾的增强版滑块已经上线很久了,最近心血来潮想看一下这个验证码是骡子是马,我也翻阅了很多市面上的教程,都对该验证码有一定的简介,部分还停留在理论层面,本文将从浅到深......