SpringBoot整合EasyCaptcha图形验证码

简介

EasyCaptcha:https://github.com/ele-admin/EasyCaptcha

Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。

添加依赖

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

需求分析

前后端分离,前端使用 Vue3 开发,后端使用 Spring Boot 开发。组件首次挂载时,获取验证码。点击图片刷新获取验证码,验证码存储到 Redis 数据库中。

代码实现

前端

api

/*** 后端响应的验证码参数格式*/
export interface CaptchaResponse {/*** redis中的验证码缓存key*/captchaKey: string;/*** 验证码图片Base64字符串*/captchaBase64: string;
}

/*** 获取验证码api*/
export function getCaptchaApi(): AxiosPromise<CaptchaResponse> {return request({url: '/auth/captcha',method: 'get'})
}

vue组件

<el-form-item prop="verCode"><el-input placeholder="验证码" size="large" style="width: 67%;" :prefix-icon="Aim" v-model="loginForm.verCode"></el-input><div class="login-code"><el-image :src="captchaResponse.captchaBase64" style="height: 38px;" @click="getCaptcha" title="刷新图片验证码"><template #error><div class="image-slot"><el-icon color="#A1A4AB"><icon-picture /></el-icon></div></template></el-image></div>
</el-form-item><script setup lang='ts'>
/*** 后端响应的验证码参数*/
const captchaResponse = ref<CaptchaResponse>({captchaKey: '', // redis中的验证码缓存keycaptchaBase64: '', // 验证码图片Base64字符串
})
/*** 获取图片验证码*/
function getCaptcha() {getCaptchaApi().then((response) => {captchaResponse.value = response.data}).catch((error) => {return Promise.reject(error)})
}
/*** 组件挂载时,获取图片验证码*/
onMounted(() => {getCaptcha()})
</script>

后端

package com.lcloud.controller;import com.lcloud.dto.UserLoginDTO;
import com.lcloud.response.Response;
import com.lcloud.service.AuthService;
import com.lcloud.vo.CaptchaVO;
import com.lcloud.vo.UserLoginVO;
import com.wf.captcha.SpecCaptcha;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;import java.util.UUID;@Slf4j
@RestController
@RequestMapping("/auth")
@Tag(name = "授权管理")
public class AuthController {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;/*** 获取图片验证码** @return 图片验证码的key和base64编码字符串* @throws Exception 抛出异常*/@GetMapping("/captcha")@Operation(summary = "获取图片验证码")public Response<CaptchaVO> captcha() throws Exception {// 设置图片验证码的属性(宽、高、长度、字体)SpecCaptcha specCaptcha = new SpecCaptcha(100, 38, 4);specCaptcha.setFont(1);// 图片验证码转换成base64编码字符串String captchaBase64 = specCaptcha.toBase64();// 图片验证码结果String key = UUID.randomUUID().toString();//log.info("key: {}", key);String verCode = specCaptcha.text().toLowerCase();// (key,value)=》(uuid,verCode)存入redisredisTemplate.opsForValue().set(key, verCode);// 返回图片验证码的key和base64编码字符串CaptchaVO captchaVO = CaptchaVO.builder().captchaKey(key).captchaBase64(captchaBase64).build();return Response.success(captchaVO);}
}

测试

image-20240125212212926

image-20240125212310817

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

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

相关文章

windows下删除docker镜像但是空间没有释放减小(docker desktop)

wsl --list --verbose在运行的就stop wsl --terminate docker-desktop wsl --terminate docker-desktop-datadiskpart选择虚拟文件的位置 select vdisk file"C:\Users\64512\AppData\Local\Docker\wsl\data\ext4.vhdx"开始压缩 compact vdiskdetach vdiskexit变小…

[机器学习]KNN——K邻近算法实现

一.K邻近算法概念 二.代码实现 # 0. 引入依赖 import numpy as np import pandas as pd# 这里直接引入sklearn里的数据集&#xff0c;iris鸢尾花 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 切分数据集为训练集和测试…

来聊聊大厂面试题:求Java对象的大小

写在文章开头 日常使用Java进行业务开发时&#xff0c;我们基本不关心一个Java对象的大小&#xff0c;所以经常因为错误的估算导致大量的内存空间在无形之间被浪费了&#xff0c;所以今天笔者就基于这篇文章来聊聊一个Java对象的大小。 你好&#xff0c;我叫sharkchili&#x…

【数据结构与算法】之哈希表系列-20240129

这里写目录标题 一、217. 存在重复元素二、219. 存在重复元素 II三、242. 有效的字母异位词四、268. 丢失的数字五、290. 单词规律六、349. 两个数组的交集七、350. 两个数组的交集 II 一、217. 存在重复元素 简单 给你一个整数数组 nums 。如果任一值在数组中出现至少两次 &a…

力扣hot100 子集 回溯 超简洁

Problem: 78. 子集 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 复杂度 时间复杂度: 添加时间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) Code class Solution {List<Li…

闪测影像|智能影像测量仪高精度快速批量检测

在现代工业制造领域&#xff0c;快速批量测量零部件尺寸能确保产品质量、提升生产效率、优化生产过程、降低成本以及增强市场竞争力等。 通过快速批量测量&#xff0c;迅速检测出不合格的零部件&#xff0c;避免生产过程中的浪费和延误&#xff0c;优化生产过程并提高生产效率。…

MG7050HAN 基于声表的差分多输出 晶体振荡器 (HCSL)

基于MG7050 HAN的声表差分多输出晶体振荡器(HCSL)&#xff0c;采用两路或四路差分HCSL&#xff08;高速电流驱动逻辑&#xff09;输出&#xff0c;可以减少外部扇出缓冲区&#xff0c;特别适用于需要超低抖动、高频率范围内稳定工作的应用场合。其输出特性曲线超低抖动&#xf…

【C/C++ 05】快速排序

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序算法&#xff0c;其基本思想是&#xff1a;任取待排序序列中的某元素作为基准值&#xff0c;按照该基准值将待排序集合分割成两个子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;右子序列中所有元素均大于…

集简云数据表新增动态下拉,一键拉取相关数据,快速实现业务场景自动化

为了提升数据表相关场景的数据交互的效率和准确性&#xff0c;本周集简云数据表新增了动态下拉字段&#xff0c;可直接在该字段中关联应用动作获取&#xff0c;无需搭建复杂流程&#xff0c;可搭配按钮使用&#xff0c;直接调用和配置应用动作获取相关字段数据&#xff0c;手动…

MySQL前百分之N问题--percent_rank()函数

PERCENT_RANK()函数 PERCENT_RANK()函数用于将每行按照(rank - 1) / (rows - 1)进行计算,用以求MySQL中前百分之N问题。其中&#xff0c;rank为RANK()函数产生的序号&#xff0c;rows为当前窗口的记录总行数 PERCENT_RANK()函数返回介于 0 和 1 之间的小数值 selectstudent_…

elementui中的tree自定义图标

需求&#xff1a;实现如下样式的树形列表 自定义树的图标以及点击时&#xff0c;可以根据子级的关闭&#xff0c;切换图标 <el-tree :data"treeList" :props"defaultProps"><template #default"{ node, data }"><span class&quo…

Mac安装及配置MySql及图形化工具MySQLworkbench安装

Mac下载配置MySql mysql下载及安装 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 根据自己电脑确定下载x86还是ARM版本的 如果不确定&#xff0c;可以查看自己电脑版本&#xff0c;终端输入命令 uname -a 点击Download下载&#xff0c;可跳过登录注册&…