SpringBoot整合EasyCaptcha實現(xiàn)圖形驗證碼功能
簡介
EasyCaptcha:https://github.com/ele-admin/EasyCaptcha
Java圖形驗證碼,支持gif、中文、算術(shù)等類型,可用于Java Web、JavaSE等項目。
添加依賴
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
需求分析
前后端分離,前端使用 Vue3 開發(fā),后端使用 Spring Boot 開發(fā)。組件首次掛載時,獲取驗證碼。點擊圖片刷新獲取驗證碼,驗證碼存儲到 Redis 數(shù)據(jù)庫中。
代碼實現(xiàn)
前端
api
/**
* 后端響應(yīng)的驗證碼參數(shù)格式
*/
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'>
/**
* 后端響應(yīng)的驗證碼參數(shù)
*/
const captchaResponse = ref<CaptchaResponse>({
captchaKey: '', // redis中的驗證碼緩存key
captchaBase64: '', // 驗證碼圖片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 = "授權(quán)管理")
public class AuthController {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
/**
* 獲取圖片驗證碼
*
* @return 圖片驗證碼的key和base64編碼字符串
* @throws Exception 拋出異常
*/
@GetMapping("/captcha")
@Operation(summary = "獲取圖片驗證碼")
public Response<CaptchaVO> captcha() throws Exception {
// 設(shè)置圖片驗證碼的屬性(寬、高、長度、字體)
SpecCaptcha specCaptcha = new SpecCaptcha(100, 38, 4);
specCaptcha.setFont(1);
// 圖片驗證碼轉(zhuǎn)換成base64編碼字符串
String captchaBase64 = specCaptcha.toBase64();
// 圖片驗證碼結(jié)果
String key = UUID.randomUUID().toString();
//log.info("key: {}", key);
String verCode = specCaptcha.text().toLowerCase();
// (key,value)=》(uuid,verCode)存入redis
redisTemplate.opsForValue().set(key, verCode);
// 返回圖片驗證碼的key和base64編碼字符串
CaptchaVO captchaVO = CaptchaVO.builder().captchaKey(key).captchaBase64(captchaBase64).build();
return Response.success(captchaVO);
}
}
測試


以上就是SpringBoot整合EasyCaptcha實現(xiàn)圖形驗證碼功能的詳細內(nèi)容,更多關(guān)于SpringBoot EasyCaptcha驗證碼的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解利用SpringCloud搭建一個最簡單的微服務(wù)框架
這篇文章主要介紹了詳解利用SpringCloud搭建一個最簡單的微服務(wù)框架,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11
Java的Struts框架中<results>標(biāo)簽的使用方法
這篇文章主要介紹了Java的Struts框架中<results>標(biāo)簽的使用方法,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-11-11
SpringBoot+Mybatis plus實現(xiàn)多數(shù)據(jù)源整合的實踐
本文主要介紹了SpringBoot+Mybatis plus實現(xiàn)多數(shù)據(jù)源整合的實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
springMVC的RequestMapping請求不到路徑的解決
這篇文章主要介紹了springMVC的RequestMapping請求不到路徑的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
如何使用IDEA開發(fā)Spark SQL程序(一文搞懂)
Spark SQL 是一個用來處理結(jié)構(gòu)化數(shù)據(jù)的spark組件。它提供了一個叫做DataFrames的可編程抽象數(shù)據(jù)模型,并且可被視為一個分布式的SQL查詢引擎。這篇文章主要介紹了如何使用IDEA開發(fā)Spark SQL程序(一文搞懂),需要的朋友可以參考下2021-08-08
java使用websocket,并且獲取HttpSession 源碼分析(推薦)
這篇文章主要介紹了java使用websocket,并且獲取HttpSession,通過使用配置源碼分析了各方面知識點,具體操作步驟大家可查看下文的詳細講解,感興趣的小伙伴們可以參考一下。2017-08-08

