当前位置: 首页 > article >正文

使用cage工具包生成验证码

目录

  • 1. 导入依赖
  • 2. 控制类
  • 3. 测试

1. 导入依赖

<!--      验证码工具 -->
      <dependency>
        <groupId>com.github.cage</groupId>
        <artifactId>cage</artifactId>
        <version>1.0</version>
      </dependency>

2. 控制类

@RestController
@RequestMapping("captcha")
public class CaptchaController {
    private final Cage cage = new GCage();
    //captcha/getCaptcha
    @RequestMapping("getCaptcha")
    //因为使用的是springboot3,所以这里导入的HttpSession一定是jakarta.servlet.http.HttpSession
    public String getCaptcha(HttpSession session){
        //使用 getTokenGenerator().next() 方法生成一个新的验证码字符串
        String captcha = cage.getTokenGenerator().next();
        //将验证码保存到session中
        session.setAttribute("captcha",captcha);
        //打印验证码
        System.out.println("captcha:"+captcha);
        //生成验证码图片
        byte[] image = cage.draw(captcha);
        //将图片转换为Base64编码返回
        return Base64.getEncoder().encodeToString(image);
    }
}

3. 测试

      如果直接访问http://localhost:8080/captcha/getCaptcha,会返回一个验证码图片(如下图),但是图片无法正常显示,因为浏览器默认不识别Base64编码的图片,所以需要使用工具进行测试。
在这里插入图片描述

      使用Postman工具进行测试,将返回的Base64编码数据粘贴到图片转换工具中,即可得到验证码图片。
在这里插入图片描述

      注意:postman该功能只能在登录情况下使用,否则找不到该功能。
      将以下代码添加到postman的测试脚本中,即可实现Base64编码的图片显示。

//检查响应的Content-Type是否为JSON
if (pm.response.headers.get("Content-Type").includes("application/json")) {
    //如果是JSON,则解析响应
    const jsonData = pm.response.json();
    //你的JSON处理逻辑
} else {
    //如果不是JSON,则直接处理响应文本
    const base64String = pm.response.text();
    //你的Base64处理逻辑
    const template =`
        <img src="data:image/jpeg;base64,${base64String}"alt="Base64Image"/>`;
    pm.visualizer.set(template);
}

      测试结果如下:
在这里插入图片描述


over…
图片来自网络


http://www.kler.cn/a/298711.html

相关文章:

  • STM32 FLASHdb
  • python编译为可执行文件
  • 多模态论文笔记——LLaVA
  • 华为,新华三,思科网络设备指令
  • 《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS技术理念
  • IPv6 基础协议-NDP
  • 学习Vue3的第三天
  • QT如何判断一个文件是否存在
  • C++之打造my vector篇
  • 艺术体操与骑行的完美协奏:维乐Angel Rise+坐垫,激情与力量的展现!
  • Guitar Pro 8.2.1 Build 32 永久中文破解解锁版
  • 关于前端分辨率兼容和显示器缩放兼容的处理
  • ffmpeg的安装和使用教程及案例
  • 存储课程学习笔记1_访问scsi磁盘读写测试(struct sg_io_hdr,ioctl,mmap)
  • GAF-PCNN-BiLSTM、GASF-CNN-BiLSTM、GADF-CNN-BiLSTM的多特征分类预测/故障诊断
  • Linux操作系统:yum安装报错问题
  • Linux:特殊字符整理
  • 【区块链 + 人才服务】CERX- 基于联盟链的研学资源交换网络 | FISCO BCOS应用案例
  • Mysql链接异常 | [08001] Public Key Retrieval is not allowed
  • RK3399 android7.1 话柄电话功能
  • llms 文本分类的微调
  • 《论多源数据集成及应用》写作框架,软考高级系统架构设计师
  • 【Android】NestedScrollView的简单用法与滚动冲突、滑动冲突
  • 聚观早报 | 红魔电竞平板新品发布;台积电8月份营收
  • LabVIEW步进电机控制方式
  • node.js入门基础