springboot生成、响应图片验证码

news2024/12/26 0:25:48

我们平时经常会碰见图片验证码,那么在springboot中我们该怎么实现呢

我们可以使用一款开源的验证码生成工具EasyCaptcha,其支持多种类型的验证码,例如gif、中文、算术等,并且简单易用,具体内容可参考其官方文档。

效果展示:

入门使用步骤 :

导入maven坐标:

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

创建一个图像验证码类

(以字符串的形式把图片返回给前端,这里返回的不是图片URL,而是图片本身,通过使用base-64编码算法(算法功能:将任意二进制的内容编码成为一个字符串))

@Data
@Schema(description = "图像验证码")
@AllArgsConstructor
public class CaptchaVo {

    @Schema(description="验证码图片信息")
    private String image;

    @Schema(description="验证码key")
    private String key;
}

在controller类当中 

   @Operation(summary = "获取图形验证码")
    @GetMapping("login/captcha")
    public Result<CaptchaVo> getCaptcha() {
        CaptchaVo captchaVo = loginService.getCaptcha();
        return Result.ok(captchaVo);
    }

在实现类当中

 @Override
    public CaptchaVo getCaptcha() {
        SpecCaptcha specCaptcha = new SpecCaptcha(130,48,4); //图片的宽、高、长度
        // 把redis中要保存的值统一转成小写
        String code = specCaptcha.text().toLowerCase();
        log.info("图片验证码为:"+code);
        // 生成唯一ID
        String key = RedisConstant.ADMIN_LOGIN_PREFIX + UUID.randomUUID().toString();
        ValueOperations opsForValue = redisTemplate.opsForValue();
        // 将验证码保存到redis当中(过期时间为60秒)
        opsForValue.set(key,code,RedisConstant.ADMIN_LOGIN_CAPTCHA_TTL_SEC,TimeUnit.SECONDS);

        return new CaptchaVo(specCaptcha.toBase64(),key);
    }

更多内容参考 官方文档。

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

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

相关文章

网站SSL证书该如何更新?

网站SSL证书的更新是一个确保网站安全性的重要步骤。以下是一个详细的更新流程&#xff1a; 一、检查证书有效期 首先&#xff0c;需要定期检查SSL证书的有效期。通常情况下&#xff0c;SSL证书的有效期为一年&#xff0c;到期前需要进行更新。可以通过以下方式检查证书有效期…

证书|“机器学习工程师”来了,由工业和信息化部教育与考试中心颁发,含金量高

“机器学习工程师”职业技术考试是由工业和信息化部教育与考试中心推出人才考核标准&#xff0c;在互联网、零售、金融、电信、医学、旅游等行业均有涉及&#xff0c;是专门从事数据采集、数据分析、机器学习、人工智能并能制作业务报告、提供决策的新型数据分析人才所需要的技…

小程序滑动单元格

项目场景&#xff1a;小程序用户管理列表&#xff0c;通过单元格滑动实现“密码重置”、“删除”功能。 技术框架&#xff1a;uniapp、uview3、ts 效果如下&#xff1a; 前端页面&#xff1a; <template><view class"fui-wrap"><view class"f…

Ubuntu连接GitHub

报错&#xff1a;Please make sure you have the correct access rights and the repository exists.原因&#xff1a;本地没有SSH Key存在解决&#xff1a; 首先为系统设置github的用户名和自己的邮箱 git config --global user.name "****" git config --global us…

2024新型数字政府综合解决方案(一)

新型数字政府综合解决方案通过整合先进的数字技术和智能化系统&#xff0c;构建了一个高效、透明且响应迅速的政府服务平台&#xff0c;能够实现跨部门数据共享和实时信息更新。该解决方案包括智能数据分析、大数据平台和云计算服务&#xff0c;旨在提升政府决策的科学性和行政…

Transformer问题总结及实现

目录 前提&#xff1a; 注意&#xff1a;以下对于优化的问题&#xff0c;要回答这个问题&#xff1a;前一种方法的局限性在哪里&#xff0c;优化的方法是怎么进行优化的&#xff1f;&#xff08;未完全解决&#xff09; Step1:关于Transformer的疑问 Step2&#xff1a;关于…

初步认识Linux系统

前言 Linux系统具有许多优点&#xff0c;不仅系统性能稳定&#xff0c;而且是开源软件。其核心防火墙组件性能高效、配置简单&#xff0c;保证了系统的安全。在很多企业网络中&#xff0c;为了追求速度和安全&#xff0c;Linux不仅仅是被网络运维人员当作服务器使用&#xff0c…

FreeRTOS互斥量

文章目录 一、互斥量的使用场合二、互斥量函数1、创建2、其他函数 三、示例: 优先级继承四、递归锁1、死锁的概念2、自我死锁3、函数 怎么独享厕所&#xff1f;自己开门上锁&#xff0c;完事了自己开锁。 你当然可以进去后&#xff0c;让别人帮你把门&#xff1a;但是&#xff…

Linux驱动入门实验班——步进电机模块驱动(附百问网视频链接)

目录 一、工作原理 二、接口图 三、真值表 四、编写思路 1.构造file_operations结构体 2.编写入口函数 3.编写出口函数 4.编写write函数 五、bug记录 六、源码 课程链接 一、工作原理 步进电机由定子和转子两部分组成。定子上有多组线圈&#xff0c;通常称为相&…

8.16 mysql读写分离架构+MyCAT实现读写分离

1、读写分离的目的 数据库负载均衡&#xff1a; 当数据库请求增多时&#xff0c;单例数据库不能够满足业务 需求。需要进行数据库实例的扩容。多台数据库同时相 应请求。也就是说需要对数据库的请求&#xff0c;进行负载均衡 但是由于数据库服务特殊原因&#xff0c;数据库扩容…

《SPSS零基础入门教程》学习笔记——05.模型入门

文章目录 5.1 回归模型5.2 分类模型5.3 降维和刻度模型5.4 生存分析和时间序列模型 5.1 回归模型 线性回归&#xff08;分析 -> 回归 -> 线性&#xff09;曲线估计&#xff08;分析 -> 回归 -> 曲线估计&#xff09; 二元Logistic回归&#xff08;分析 -> 回归…

Centos7主机带宽限速

需求&#xff1a;最近有两个主机经常把带宽打满。咨询了阿里云无法对内网网卡做限制。这边想使用linux默认的TC工具。 限速之前测试带宽。这时带宽有 168.4MB/s。 ]# scp filebeat-8.8.2-x86_64.rpm 172.116.47.54:/root/100% 26MB 168.4MB/s 00:00 1. 限制出站&#xff0…

数据结构入门——08排序

1.排序 1.1什么是排序 排序是一种操作&#xff0c;通过比较记录中的关键字&#xff0c;将一组数据按照特定顺序&#xff08;递增或递减&#xff09;排列起来。排序在计算机科学中非常重要&#xff0c;因为它不仅有助于数据的快速检索&#xff0c;还能提高其他算法的性能。 1…

PostgreSQL-03-入门篇-过滤数据

文章目录 1. WHEREWHERE 子句概述WHERE 子句示例1) 使用 WHERE 子句和等于运算符 () 示例2) 使用 WHERE 子句和 AND 运算符示例3) 使用 WHERE 子句和 OR 运算符示例4) 使用 WHERE 子句和 IN 运算符示例5) 使用 WHERE 子句和 LIKE 运算符示例6) 将 WHERE 子句与 BETWEEN 运算符一…

自动化运维---ansible

ansible是一种由Python开发的自动化运维工具&#xff0c;集合了众多运维工具&#xff08;puppet、cfengine、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令等功能。 特点: 部署简单 默认使用ssh进行管理&#xff0c;基于py…

【LLM大模型论文日更】| 大型语言模型用于模拟搜索用户行为

论文&#xff1a;https://arxiv.org/pdf/2403.09142代码&#xff1a;未开源机构&#xff1a;中国人民大学高瓴人工智能研究院领域&#xff1a;信息检索发表&#xff1a;SIGIR2024 短文 Abstract 由于成本效益和可再现性方面的优势&#xff0c;用户模拟已成为信息检索系统面向用…

Python酷库之旅-第三方库Pandas(084)

目录 一、用法精讲 351、pandas.Series.str.isdigit方法 351-1、语法 351-2、参数 351-3、功能 351-4、返回值 351-5、说明 351-6、用法 351-6-1、数据准备 351-6-2、代码示例 351-6-3、结果输出 352、pandas.Series.str.isspace方法 352-1、语法 352-2、参数 3…

【 亿邦动力网-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

钢铁百科:美标A633GrC材质分析、A633GrC正火状态、A633GrC材料性能

A633GrC钢板是一种美国ASTM标准的高强度低合金结构钢板&#xff0c;字母"A"代表钢&#xff08;Steel&#xff09;&#xff0c;数字"633"表示该材料的牌号&#xff0c;而"GrC"表示该材料为高强度低合金钢&#xff08;High Strength Low Alloy&…