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

news2025/3/13 18:30:57

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,只支持加减,计算结果为正整数
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Postman 加密接口测试 | 使用Rsa、Aes对参数加密

前言 做接口加密的测试也是上次遇到的&#xff0c;在这之前&#xff0c;都是在浏览器登录后&#xff0c;从请求头中复制 token 过来测试.... 说真的&#xff0c;一瞬间我都有点诧异&#xff0c;这样也太麻烦了吧~&#xff0c;因而也就产生了这篇文章。 还有一些问题&#xf…

Java学习Lambda表达式

Lambda表达式 有且只有一个未实现的方法叫做Lambda表达式&#xff0c;可以实现函数式编程 // 这个注解是用来检查你写的函数是否是函数式接口 FunctionalInterfaceinterface Myinterface {int sum(int a, int b);default String priteTitle(String name, int age, String sex)…

Docker 简介和安装

目录 Docker 是什么 跟普通虚拟机的对比 打包、分发、部署 Docker 部署的优势 Docker 通常用来做什么 重要概念&#xff1a;镜像、容器 安装 镜像加速源 Docker 是什么 Docker 是一个应用打包、分发、部署的工具 你也可以把它理解为一个轻量的虚拟机&#xff0c;它只虚…

友思特案例 | 自动快速定位:使用波长选择器测量滤光片的关键光学性能指标

导读 光学滤光片检测的手动调节校准的传统方法存在诸多不确定误差和高昂的成本消耗。友思特全自动可调谐光源检测解决方案&#xff0c;可全自动调节波长带宽&#xff0c;快速收集光谱数据&#xff0c;缩短检测时间、降低质检成本&#xff0c;实现极高的准确率和快速检测效率。…

有关Qt的调用其他cpp文件出现的小问题

一开始出现了运行mainwindow文件过程调用其他cpp文件&#xff0c;而导致运行的ui界面卡住&#xff0c;后来发现在两个cpp文件中都进行了界面的初始化而导致界面的某些控件二次使用&#xff0c;所以会卡住。 ui->setupUi(this); 在Qt框架中&#xff0c;ui->setupUi(this)…

ECS搭建redis4.0集群版

在 CentOS 上安装 Redis 4.0 集群版涉及多个步骤&#xff0c;包括安装 Redis、配置集群并启动它。下面将详细介绍整个过程&#xff1a; 1. 系统更新 首先&#xff0c;保证系统是最新的。 sudo yum update2. 安装依赖项 安装构建 Redis 所必需的依赖&#xff1a; sudo yum …

YOLOv5改进 |损失函数 | 替换CIoU损失函数为EIoU【附完整代码 】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 在目标检测领域内&#xff0c;尽管YOLO系列的算法傲视群雄&#xff0c;但在某些方面仍然存在改进的空间。在YOLOv5的损失函数中&#xff0c;…

<Rust><iced>基于rust使用iced库构建GUI实例:动态改变主题色

前言 本专栏是Rust实例应用。 环境配置 平台&#xff1a;windows 软件&#xff1a;vscode 语言&#xff1a;rust 库&#xff1a;iced、iced_aw 概述 本篇构建了这样的一个实例&#xff0c;可以动态修改UI的主题&#xff0c;通过菜单栏来选择预设的自定义主题和官方主题&#…

YB4084系列 SOT23-5 耐压30V 600mA线性锂电池充电芯片,带热调节

电池充电-线性锂电池-YB4084系列 YB4084是一个完整的恒流恒压线性充电器为单节锂充电电池。由于内部P-MOSFET架构&#xff0c;不需要外部检测电阻&#xff0c;也不需要阻塞二极管。此外&#xff0c;YB4084是专门设计的USB电源规格内工作。它的SOT23-5封装和低外部元件计数使YB…

在Oracle VM virtual box 中复制 CentOS 7虚拟机更改IP地址的操作

最近玩Redis主从复制的时候&#xff0c;我装了一个虚拟机&#xff0c;但主从复制需要准备3个虚拟机&#xff0c;这个时候&#xff0c;我又不想一个一个去装&#xff0c;我看到Oracle VM virtual box提供了一个虚拟机复制操作&#xff0c;于是就用了一下这个功能&#xff0c;发现…

dotenv 配置踩坑-显示undefined

今天在学习dotenv,结果自己按照官方文档巧下来竟然还是不行&#xff0c;人麻了~ 这是我的目录结构 按照配置那么&#xff0c;我们只需要在config.default.js中写入如下代码就可以实现它将环境变量从文件加载到process.env中。 但是&#xff0c;但是这里犯了一个低级错误&#…

docker和docker-compose的安装

docker的安装 1.安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2.设置开机自启动 systemctl start docker #启动docker systemctl enable docker3.配置阿里云镜像 不配置镜像的话&#xff0c;进行 docker pull 等操作会比较慢。进入阿里云&…

基于django | 创建app,并启动django

1、删除系统默认的目录路径&#xff1a;BASE_DIR / templetes 2、在终端输入命令&#xff1a; python manage.py startapp app01 # 这里的app01是我创建app的名称 3、如果没有创建成功&#xff0c;手动点击 Creat App , 4、在 setting.py 中找到 INSTALLED_APPS ,添加 ap…

xml 取值错误 #{} boolean 一直为 false

取值时 #{param.msgStatus} 一直是false&#xff0c;java代码里面显示true。 <select id"findPageOaReading" resultType"com.focusin.data.office.func.dto.ProcessMessageInfoDTO">select i.*, t.template_name procdefNamefrom process_message_…

【办公类-04-02】华为助手导出照片读取拍摄时间分类导出,视频不行)

背景需求 今天我用QQ相册导出照片&#xff0c;但是始终在转圈&#xff0c;手机上无法跳出“连结“”的提示&#xff0c;换了台式和笔记本都无法传输。&#xff08;明明5月14日还可以导出的&#xff09; 最后我只能用华为传输助手&#xff0c;把照片快速提取出来了。 使用原来…

记录Nuxt 3 官网项目的一次部署

本来以为就是一次简单的部署&#xff0c;之前也是部署过几次nuxt项目了&#xff0c;所以&#xff0c;并没有要记录的想法。但是过程出现了很多问题&#xff0c;最后考虑还是写下来吧。留个记录&#xff08;完整的配置部署过程&#xff09; 这里我将要说明两种部署方式以供选择&…

ingress规则

一 k8s 对外服务之 Ingress LB ingress 1 Ingress 简介 service的作用体现在两个方面 ? ① 对集群内部&#xff0c;它不断跟踪pod的变化&#xff0c;更新endpoint中对应pod的对象&#xff0c;提供了ip不断变化的pod的服务发现机制&#xff1b; ② 对集群外部&#xff0c…

针对硅基氮化镓高电子迁移率晶体管(GaN-HEMT)的准物理等效电路模型,包含基板中射频漏电流的温度依赖性

来源&#xff1a;Quasi-Physical Equivalent Circuit Model of RF Leakage Current in Substrate Including Temperature Dependence for GaN-HEMT on Si&#xff08;TMTT 23年&#xff09; 摘要 该文章提出了一种针对硅基氮化镓高电子迁移率晶体管&#xff08;GaN-HEMT&…

逐步掌握最佳Ai Agents框架-AutoGen 九 RAG应用

在最近的几篇文章里&#xff0c;我们使用AutoGen实现了一些Demo。这篇文章&#xff0c;我们将使用AutoGen来完成RAG应用开发。 RAG应用 RAG全称"Retrieval-Augmented Generation",即检索增强生成&#xff0c;它是自然语言处理中的一项技术。这种模型结合了检索式&a…

【操作系统】(详细理解进程的状态)执行状态、就绪状态、阻塞状态、挂起状态

下面是进程的几种状态的概念&#xff1a; 执行状态&#xff1a;当一个进程已获得必要资源&#xff0c;并占有CPU进行执行。 就绪状体&#xff1a;进程已分配到除CPU外的所有必要资源&#xff0c;只要获取CPU允许就可立即执行。 阻塞状态&#xff1a;正在执行的进程&#xff0c;…