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

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.lryc.cn/news/294432.html

相关文章:

  • 学习数据结构和算法的第3天
  • SpringBoot实战第三天
  • mysql学习打卡day22
  • Unity | Spine动画记录
  • 【Flink】FlinkSQL实现数据从MySQL到MySQL
  • python爬虫抓取新闻并且植入自己的mysql远程数据库内
  • netty实现简单的客户端、服务端互相发消息
  • 利用jmeter完成简单的压力测试
  • 【手写数据库toadb】toadb物理存储模型,数据库物理存储原理,物理文件组织关系以及行列混合模型存储结构
  • MySQL-----DDL基础操作
  • 【MySQL】在 Centos7 环境安装 MySQL -- 详细完整教程
  • 理解React中的setState()方法
  • 数据库管理-第144期 深入使用EMCC-01(20240204)
  • flask_django_python五金电商网络营销的可视化分析研究
  • Java并发(二十三)----同步模式之保护性暂停
  • ###C语言程序设计-----C语言学习(9)#函数基础
  • Dockerfile文件参数配置和使用
  • Java实现婚恋交友网站 JAVA+Vue+SpringBoot+MySQL
  • React16源码: React中详解在渲染阶段Suspend的源码实现
  • mac电脑风扇控制软件:Macs Fan Control Pro for mac 激活版
  • easyexcel解析跨多行的数据
  • 双目相机立体匹配基础
  • 【图论】网络流
  • 【Matplotlib】figure方法 你真的会了吗!?
  • [C++]继承(续)
  • 恒创科技:服务器内存不足影响大吗?
  • 深入理解网络通信和TCP/IP协议
  • Open CASCADE学习|分割曲线
  • vulhub中Adminer远程文件读取漏洞复现(CVE-2021-43008)
  • MOS管驱动电流估算-Qg参数