Spring Boot2.7生成用于登录的图片验证码

先在 pom.xml 注入依赖

<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version>
</dependency>

然后 需要在配置文件中声明一下DefaultKaptcha 的 bean对象
在这里插入图片描述
然后 我们随便找个目录创建一个类 叫CaptchaGenerator.java
专门处理生成验证码的逻辑

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Properties;@Component
public class CaptchaGenerator {private DefaultKaptcha defaultKaptcha;@Autowiredpublic CaptchaGenerator(DefaultKaptcha defaultKaptcha) {this.defaultKaptcha = defaultKaptcha;}public byte[] generateCaptchaImage(String captchaText) throws IOException {Properties properties = new Properties();properties.setProperty("kaptcha.textproducer.char.string", "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");properties.setProperty("kaptcha.textproducer.char.length", "4");Config config = new Config(properties);defaultKaptcha.setConfig(config);BufferedImage captchaImage = defaultKaptcha.createImage(captchaText);ByteArrayOutputStream outputStream = new ByteArrayOutputStream();ImageIO.write(captchaImage, "jpg", outputStream);return outputStream.toByteArray();}
}

然后 在写接口的类中 声明一下CaptchaGenerator 的对象
注意 这里要用构造方法赋值
否则东西会拿不到
在这里插入图片描述

private CaptchaGenerator captchaGenerator;@Autowired
public BookController(CaptchaGenerator captchaGenerator) {this.captchaGenerator = captchaGenerator;
}

最后 编写函数

@GetMapping(value = "/captcha", produces = MediaType.IMAGE_JPEG_VALUE)
public void getCaptchaImage(HttpServletResponse response) throws IOException {String captchaText = "3922";// 生成验证码文本byte[] captchaImage = captchaGenerator.generateCaptchaImage(captchaText);response.setContentType(MediaType.IMAGE_JPEG_VALUE);response.getOutputStream().write(captchaImage);response.getOutputStream().flush();
}

在这里插入图片描述

然后 我们直接访问 端口+接口前缀/captcha 即可访问到验证码
在这里插入图片描述
这里 我设置的验证码内容是 3922 你们可以根据情况修改 一般都是随机的

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

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

相关文章

76、SpringBoot 整合 MyBatis------使用 sqlSession 作为 Dao 组件(就是ssm那一套,在 xml 写sql)

就是 ssm 那套&#xff0c;在xml 上面写sql ★ 基于SqlSession来实现DAO组件的方式 - MyBatis提供的Starter会自动在Spring容器中配置SqlSession&#xff08;其实SqlSessionTemplate实现类&#xff09;、并将它注入其他组件&#xff08;如DAO组件&#xff09;- DAO组件可直接…

前端-防止多次点击

前端-防止多次点击 原理&#xff1a;设置一个状态变量&#xff0c;为true的时候才能触发&#xff0c;false不能触发&#xff0c;运用setTimeout延时修改状态变量状态&#xff0c;达到不能连点的效果。 注释&#xff1a; 这里封装了一个js文件 全局注册 用的时候比较方便 1.封…

js-nginx配置字段适配前端服务

当我们有这样一个需求&#xff0c;前端同一套代码&#xff0c;但要根据一些特殊字段展示不同的内容&#xff0c;比如我们有一个场id&#xff0c;暂时这个场id放在前端&#xff0c;后端根据这个场id返回不同的数据&#xff0c;这里前端部署用的是yaml文件&#xff0c;平台是ranc…

如何使用Python构建OTP验证系统?

即使您的密码被盗&#xff0c;OTP验证系统也可以充当安全的关键要素。它让您无需记住密码&#xff0c;充当额外的安全层&#xff0c;并降低了网络钓鱼的风险。 不妨学习用Python建立一个OTP验证系统&#xff0c;它会向您的手机号码发送一个OTP&#xff0c;有效期只有两分钟&am…

目标检测YOLO实战应用案例100讲-机载SAR复杂场景目标高效检测方法研究(续)

目录 3.3 实验分析 3.3.1 实验设置 3.3.2 实验结果 3.3.3 性能分析 SAR复杂场景高效成像检测 <

linux 文件锁

建议锁,强制锁,记录锁的概念 建议锁&#xff1a; 如果某一个进程对一个文件持有一把锁之后&#xff0c;其他进程仍然可以直接对文件进行操作(open, read, write)而不会被系统禁止&#xff0c;即使这个进程没有持有锁。只是一种编程上的约定。建议锁只对遵守建议锁准则的进程生…

知识付费平台开发技术实践:构建数字学习的未来

引言 知识付费平台的兴起正在塑造着数字学习的未来。本文将介绍一些关键的技术实践&#xff0c;帮助开发者构建强大的知识付费平台&#xff0c;提供出色的数字学习体验。 1. 选择适当的技术栈 在开始知识付费平台的开发之前&#xff0c;首要任务是选择适当的技术栈。这包括…

TS中的数据类型

一、number类型 let c: number; c 10; c "hello"; // 不能复制string类型 二、string类型 let d: string; d "hello"; d 10; // 不能复制number类型 三、boolean类型 let e: boolean true; e false; e 10; // 不能赋值true和false以外的值 四…

嵌入式裸机轻量级架构探索总结

为什么会想着探索下嵌入式裸机的架构呢&#xff1f;是因为最近写了一个项目&#xff0c;项目开发接近尾声时&#xff0c;发现了一些问题&#xff1a; 1、项目中&#xff0c;驱动层和应用层掺杂在一起&#xff0c;虽然大部分是应用层调用驱动层&#xff0c;但是也存在驱动层调用…

七、图覆盖

工程学中的很多原理和打棒球一样。你不一定非常强壮才能打出全垒打&#xff0c;你只需要打在球的正中心。 7.1 概述 有向图是许多覆盖准则的基础。边的初始节点有时被称为前驱节点&#xff0c;终止节点被称为后继节点&#xff0c;路径是一个节点序列。 测试路径&#xff1a;…

【运维面试100问】(二)你最擅长什么?对某某擅长吗?---请设计一个符合公司使用的lvs架构

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

笔试面试相关记录(4)

&#xff08;1&#xff09;实现防火墙的主流技术有哪些&#xff1f; 实施防火墙主要采用哪些技术 - 服务器 - 亿速云 (yisu.com) &#xff08;2&#xff09; char arr[][2] {a, b, c, d}; printf("%d", *(arr1)); 输出的是谁的地址&#xff1f;字符c 测试代码如下…

ThreeJS-3D教学一基础场景创建

Three.js 是一个开源的 JS 3D 图形库&#xff0c;用于创建和展示高性能、交互式的 3D 图形场景。它建立在 WebGL 技术之上&#xff0c;并提供了丰富的功能和工具&#xff0c;使开发者可以轻松地构建令人惊叹的 3D 可视化效果。 Three.js 提供了一套完整的工具和 API&#xff0…

JUC中创建的组件 多线程使用“哈希表”

JUC中创建的组件 JUC中创建的组件这些内容都不太常用&#xff0c;偶尔用到面试的时候&#xff0c;偶尔用到&#xff01;到时候自行查找即可&#xff0c;本文主要来快速的过一下&#xff0c;留个印象即可~ JUC&#xff08;java.util.concurrent&#xff09;和多线程相关的工具…

uni-app微信小程序canvas中使用canvasToTempFilePath在手机上导出图片尺寸与实际不符

问题描述&#xff1a;比如图片的尺寸是1125*2001像素&#xff0c;这样用微信开发者工具下载下来的图片尺寸是1125*2001像素&#xff0c;用不同的手机去操作&#xff0c;下载出来的图片尺寸都不一样&#xff0c;和原图片尺寸差距很大。 解决方案&#xff1a;canvas写入的时候是…

python从入门到精通(一)

自己也有三四年的码龄了&#xff0c;目前&#xff0c;重拾起自己的博客&#xff0c;记录自己的学习笔记&#xff0c;为大家提供优质内容&#xff0c;也来巩固自己的学习内容。 很开心也成功成为了一名研究生&#xff0c;张张的研究方向是图像处理和计算机视觉这一块&#xff0c…

C++QT 作业8

#include "mywind.h" #include "ui_mywind.h" #include <iostream> #include <QIcon> #include <QLabel> #include <QLineEdit> #include <QDebug>//信息调试类 用于输出数据 Mywind::Mywind(QWidget *parent): QWidget(pa…

自动化测试---选择元素

第一个自动化测试脚本 from selenium import webdriver from selenium.webdriver.chrome.service import Service# 创建 WebDriver 对象&#xff0c;指明使用chrome浏览器驱动 wd webdriver.Chrome(serviceService(rD:\eg浏览器下载文件\chromedriver-win64\chromedriver.exe…

python3.11版本pip install ddddocr调用时报错got an unexpected keyword argument ‘det‘ 解决

一、如图出现如下问题 ddddocr.__init__() got an unexpected keyword argument det出现问题原因&#xff1a;python3.11默认安装版本就旧版的ddddocr1.0的&#xff0c;所以导致如下报错 二、解决方案一&#xff08;推荐&#xff09; python3.11的环境直接安装这个即可&…

物 理 层

二、物理层 1、物理层的基本概念 物理层的作用:尽可能的屏蔽掉传输媒体和通信手段的差异&#xff0c;使物理层上面的数据链路层感觉不到这些差异&#xff0c;使其只需要考虑如何完成本层的协议和服务 1.1、物理层的主要任务 机械特性&#xff1a;指明接口所用的接线器的形状…