springboot 图形验证码 前后端分离解决方案 easy-captcha

easy-captcha介绍

easy-captcha,提供了Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目,是个很好用的工具库,文档比较完备。

在这里插入图片描述

用法

添加maven依赖

<!--图形验证码-->
 <dependency>
	  <groupId>com.github.whvcse</groupId>
	  <artifactId>easy-captcha</artifactId>
	  <version>1.6.2</version>
  </dependency>

前后端分离时,返回图形验证码的key和图片的base64;

import com.wf.captcha.SpecCaptcha;
/**
    * 获取图形验证码
    *
    * @return
    */
   @RequestMapping(value = "/getCaptcha", method = RequestMethod.GET)
   public Response getCaptcha() {
       final int width = 111;
       final int height = 36;
       String uuid = UUIDUtil.getUUID();
       int len = 4;
       //数字、字母混合的验证码
       final SpecCaptcha captcha = new SpecCaptcha(width, height, len);
       String captchaValue = captcha.text();

       final String captchaKey = getCaptchaKey(uuid);
       log.debug("图形验证码key:{},value:{}", captchaKey, captchaValue);
       //放入redis并设置过期时间
       redisUtil.set(captchaKey, captchaValue, Constants.VERIFYCODE_EXPIRETIME * 60);
       final CaptchaResult captchaResult = new CaptchaResult();
       captchaResult.setCaptchaKey(uuid);
       captchaResult.setImg(captcha.toBase64());
       return captchaResult;
   }
   public class CaptchaResult {
    /**
     * 图形验证码的key
     */
    private String captchaKey;
    /**
     * 图形验证码的base64图片
     */
    private String img;
}

提交验证时,将图形验证码的key和图形验证码值一并提交。

测试样例

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.supportAlgorithmSign(2); // 可设置支持的算法:2 表示只生成带加减法的公式
        captcha.setDifficulty(50); // 设置计算难度,参与计算的每一个整数的最大值
        captcha.out(outputStream);  // 输出验证码
        //简单算术类型 SimpleArithmeticCaptcha,用法同ArithmeticCaptcha,只支持加减,计算结果为正整数
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/681532.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

像图一样交流:为大语言模型编码图

译者 | 高永祺 单位 | 东北大学自然语言处理实验室 原文链接&#xff1a;https://blog.research.google/2024/03/talk-like-graph-encoding-graphs-for.html 1.作者介绍 Bahare Fatemi&#xff0c;谷歌蒙特利尔研究部门的研究科学家&#xff0c;专门从事图表示学习和自然语言…

YOLO-Worldv2两分钟快速部署

本次部署使用的框架基于ultralytics&#xff0c; 并且已经集成最新版本的YOLOv8框架&#xff1a; 一键环境配置 pip install ultralytics基础使用 训练 from ultralytics import YOLOWorld model YOLOWorld(yolov8x-worldv2.pt) results model.train(datacoco8.yaml, epo…

【全开源】知识库文档系统(ThinkPHP+FastAdmin)

&#x1f4da;知识库文档系统&#xff1a;解锁知识的无限可能 一款基于ThinkPHPFastAdmin开发的知识库文档系统&#xff0c;可用于企业工作流程的文档管理&#xff0c;结构化记录沉淀高价值信息&#xff0c;形成完整的知识体系&#xff0c;能够轻松提升知识的流转和传播效率&a…

高通开发系列 - 借助libhybris库实现Linux系统中使用Andorid库

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 返回:专栏总目录 目录 概述Android代码下载和编译aarch64开发环境libhybris下载和编译libhybris测试验证调用库中的函数概述 我主要是基于…

第三方软件测试报告的作用是什么?可全国通用吗?

随着信息技术的发展&#xff0c;市面上的软件产品越来越多&#xff0c;因此软件质量的好坏是软件企业以及用户极为关注的话题。为了更好的保障软件产品质量&#xff0c;将测试工作交给第三方软件测试机构成为了软件企业的首选。第三方软件测试不同于软件开发公司内部测试团队所…

pycharm绘图时中英文不能同时出现 中文出现小框框的问题解决

# 设置字体为微软雅黑&#xff0c;正确显示负号 plt.rcParams[font.sans-serif] [Microsoft YaHei] plt.rcParams[axes.unicode_minus] False

解析数据洁净之道:BI 中如何清洗脏数据?

前言 随着数字化和信息化进程的不断发展&#xff0c;数据已经成为企业的一项不可或缺的重要资源。然而&#xff0c;这些数据往往是庞大的、复杂的&#xff0c;甚至掺杂着很多的无效的、错误的数据。那么如何在这些数据中过滤那些干扰项&#xff0c;保证数据发挥最大的作用呢&a…

html文件使用postcss-pxtorem适配移动端 使用tailwindcss库

项目截图 插件下载 npm i -D postcss8.4.38 postcss-cli10.1.0 postcss-pxtorem6.1.0 tailwindcss3.4.3postcss.config.js & tailwind.config.js postcss.config.js const pxToRem require(postcss-pxtorem) module.exports {plugins: [pxToRem({rootValue: 75,propLi…

利用GPT和PlantUML快速生成UML图用于设计

在软件开发中&#xff0c;设计阶段可是关键的一步。UML&#xff08;统一建模语言&#xff09;图能帮我们更清晰地理解和规划系统结构&#xff0c;但手动画UML图有时会很费时费力。好消息是&#xff0c;通过结合使用ChatGPT和PlantUML&#xff0c;我们可以高效地生成UML图&#…

python中文件操作详解(1)

在python中我们经常会对文件进行一些常见的操作&#xff0c;比如打开文件&#xff0c;操作文件&#xff0c;关闭文件&#xff0c;此篇文章主要是记录自己在学习过程中的一些总结供大家学习&#xff0c;也欢迎查漏补缺~ 1.文件的打开 方式一&#xff1a;此种方式打开的文件需要…

拉普拉斯算子

问Chat GPT两种不同拉普拉斯算子的区别&#xff1a;

【WEEK15】 【DAY1】异步任务【中文版】

2024.6.3 Monday 目录 17.异步、定时、邮件任务17.1.异步任务17.1.1.新建springboot-09-test项目17.1.2.创建一个service包17.1.2.1.创建一个类AsyncService 17.1.3.编写controller包17.1.3.1.编写AsyncController类 17.1.4.运行Springboot09TestApplication.java17.1.5.修改S…

下载ubuntu22.04

建议使用&#xff1a;清华源镜像 官网下载比较慢Ubuntu 22.04.4 LTS (Jammy Jellyfish) 打开清华源向下翻 然后找到22.04 下载完成&#xff1a;

牛客热题:矩阵最长递增路径

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;矩阵最长递增路径题目链接方法一…

vulhub中PHP利用GNU C Iconv将文件读取变成RCE(CVE-2024-2961)

GNU C 是一个标准的ISO C依赖库。在GNU C中&#xff0c;iconv()函数2.39及以前存在一处缓冲区溢出漏洞&#xff0c;这可能会导致应用程序崩溃或覆盖相邻变量。 如果一个PHP应用中存在任意文件读取漏洞&#xff0c;攻击者可以利用iconv()的这个CVE-2024-2961漏洞&#xff0c;将…

写一个盲盒模拟器

最近想写一个小程序&#xff0c;随便写一个玩吧&#xff0c;先想了下功能&#xff1a; 1.有很多盲盒&#xff0c;可以选择模拟开启 2.自定义盲盒&#xff0c;我们可以自定义制作盲盒自己玩 3.用户界面&#xff0c;记录盲盒历史&#xff0c;可以给坏越提意见 所用技术栈&…

Linux下互斥体的学习使用

文章目录 前言互斥锁的定义互斥锁的数据结构互斥锁的注意事项互斥锁API函数互斥锁的使用示例结语 前言 上篇我们讲过信号量&#xff0c;本篇讲下互斥体。本篇内核源码以内核5.10为例进行讲解 互斥锁的定义 其实信号量的值设置为1就可以使用信号量进行互斥访问了&#xff0c;…

中学生学人工智能系列:如何用AI学地理

经常有读者朋友给公众号《人工智能怎么学》留言咨询如何使用人工智能学习语文、数学、英语、化学等科目。这些都是中学教师、中学生朋友及其家长们普遍关注的问题。仅仅使用留言回复的方式&#xff0c;不可能对这些问题做出具体和透彻的解答&#xff0c;因此本公众号近期将推出…

Java—集合框架、时间和空间复杂度

一、集合框架 Java集合框架(Java Collection Framework)&#xff0c;又称为容器(container)&#xff0c;是定义在 java.util 包下的一组接口(interfaces)和其实现类(classes) 其主要表现为将多个元素(element)置于一个单元中&#xff0c;用于对这些元素进行快速、便捷的存储(…

纷享销客BI典型场景案例解析

本章以具体案例来说明纷享销客一体化BI智能分析平台为企业在实际使用过程中带来的价值。 1)场景一&#xff1a;销售经理想要在周会上关注各销售人员的客户及订单情况&#xff0c;并在每周一上午9点可以把上周的整体情况周期性的将报表推送给相关销售人员。 具体图表展示样式及…