SpringBoot集成圖片驗(yàn)證碼框架easy-captcha的詳細(xì)過(guò)程
SpringBoot集成圖片驗(yàn)證碼框架easy-captcha
此項(xiàng)目已經(jīng)很久未維護(hù),如有更好的選擇,建議使用更好的選擇!!!
一、引言
驗(yàn)證碼(CAPTCHA)是現(xiàn)代應(yīng)用中防止機(jī)器人攻擊、保護(hù)接口安全的核心手段之一。然而,從零開發(fā)驗(yàn)證碼模塊需要處理圖形渲染、算法設(shè)計(jì)、安全防護(hù)等諸多復(fù)雜問(wèn)題。Easy-Captcha 作為一款輕量級(jí)開源驗(yàn)證碼框架,以簡(jiǎn)潔的API和高度可定制性成為開發(fā)者的優(yōu)選方案。下面我們將介紹如何將Easy-Captcha框架整合到SpringBoot項(xiàng)目中。
二、依賴
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>三、代碼
1. EasyCaptcha配置類
我們可以修改EasyCaptchaTypeEnum的枚舉值來(lái)使用不同的驗(yàn)證碼類型
@Configuration
@Data
public class EasyCaptchaConfig {
/**
* 驗(yàn)證碼類型
*/
private EasyCaptchaTypeEnum type = EasyCaptchaTypeEnum.GIF;
/**
* 驗(yàn)證碼緩存過(guò)期時(shí)間(單位:秒)
*/
private long ttl = 120L;
/**
* 驗(yàn)證碼內(nèi)容長(zhǎng)度
*/
private int length = 4;
/**
* 驗(yàn)證碼寬度
*/
private int width = 120;
/**
* 驗(yàn)證碼高度
*/
private int height = 36;
/**
* 驗(yàn)證碼字體
*/
private String fontName = "Verdana";
/**
* 字體風(fēng)格
*/
private Integer fontStyle = Font.PLAIN;
/**
* 字體大小
*/
private int fontSize = 20;
}2. EasyCaptchaTypeEnum枚舉類
/**
* @desc: EasyCaptcha 驗(yàn)證碼類型枚舉
* @author: shy
* @date: 2025/02/27 16:55
*/
public enum EasyCaptchaTypeEnum {
/**
* 算數(shù)
*/
ARITHMETIC,
/**
* 中文
*/
CHINESE,
/**
* 中文閃圖
*/
CHINESE_GIF,
/**
* 閃圖
*/
GIF,
/**
* png格式驗(yàn)證碼
*/
SPEC
}3. 驗(yàn)證碼生成器
/**
* @desc: 驗(yàn)證碼生成器
* @author: shy
* @date: 2025/02/27 16:59
*/
@Component
@RequiredArgsConstructor
public class EasyCaptchaProducer {
private final EasyCaptchaConfig captchaConfig;
public Captcha getCaptcha() {
Captcha captcha;
int width = captchaConfig.getWidth();
int height = captchaConfig.getHeight();
int length = captchaConfig.getLength();
String fontName = captchaConfig.getFontName();
switch (captchaConfig.getType()) {
case ARITHMETIC:
captcha = new ArithmeticCaptcha(width, height);
//固定設(shè)置為兩位,圖片為算數(shù)運(yùn)算表達(dá)式
captcha.setLen(2);
break;
case CHINESE:
captcha = new ChineseCaptcha(width, height);
captcha.setLen(length);
break;
case CHINESE_GIF:
captcha = new ChineseGifCaptcha(width, height);
captcha.setLen(length);
break;
case GIF:
captcha = new GifCaptcha(width, height);//最后一位是位數(shù)
captcha.setLen(length);
break;
case SPEC:
captcha = new SpecCaptcha(width, height);
captcha.setLen(length);
break;
default:
throw new RuntimeException("驗(yàn)證碼配置信息錯(cuò)誤!正確配置查看 CaptchaTypeEnum ");
}
// 使用默認(rèn)字體即可解決中文亂碼問(wèn)題
captcha.setFont(new Font(fontName, captchaConfig.getFontStyle(), captchaConfig.getFontSize()));
return captcha;
}
}4. 驗(yàn)證碼生成Service
/**
* @desc: EasyCaptcha 業(yè)務(wù)類
* @author: shy
* @date: 2025/02/27 17:02
*/
@Component
@RequiredArgsConstructor
public class EasyCaptchaService {
private final EasyCaptchaProducer easyCaptchaProducer;
private final EasyCaptchaConfig captchaConfig;
/**
* 獲取EasyCaptcha圖片驗(yàn)證碼
*
* @param
* @return Captcha
* @throws
* @author shy
* @date 2025/02/27 22:18
*/
public Captcha getCaptcha() {
// 獲取驗(yàn)證碼
Captcha captcha = easyCaptchaProducer.getCaptcha();
// 驗(yàn)證碼文本
String captchaText = captcha.text();
// todo 驗(yàn)證碼文本存儲(chǔ)Redis比對(duì)
System.out.println("驗(yàn)證碼文本:" + captchaText);
return captcha;
}
}5. 對(duì)外接口
@GetMapping("/getEasyCaptcha")
@ApiOperation(value = "獲取EasyCaptcha圖片驗(yàn)證碼", notes = "獲取EasyCaptcha圖片驗(yàn)證碼", httpMethod = "GET")
public void getEasyCaptcha() {
Captcha captcha = captchaService.getCaptcha();
try {
captcha.out(response.getOutputStream());
// 以上兩種方式都可以輸出圖片驗(yàn)證碼
//CaptchaUtil.out(captcha, request, response);
} catch (IOException e) {
throw new RuntimeException();
}
super.getEasyCaptcha();
}四、驗(yàn)證碼展示

動(dòng)態(tài)驗(yàn)證碼

中文驗(yàn)證碼

png格式驗(yàn)證碼
五、總結(jié)
Easy-Captcha 通過(guò)模塊化設(shè)計(jì)平衡了安全性與開發(fā)效率,其源碼結(jié)構(gòu)清晰(僅核心類約15個(gè)),適合二次開發(fā)。無(wú)論是快速實(shí)現(xiàn)基礎(chǔ)驗(yàn)證功能,還是構(gòu)建企業(yè)級(jí)人機(jī)驗(yàn)證系統(tǒng),該框架都能提供可靠支持。建議結(jié)合具體業(yè)務(wù)需求,在驗(yàn)證碼樣式、驗(yàn)證流程上做深度定制。
GitHub 地址:https://github.com/whvcse/EasyCaptcha
到此這篇關(guān)于SpringBoot集成圖片驗(yàn)證碼框架easy-captcha的文章就介紹到這了,更多相關(guān)SpringBoot驗(yàn)證碼easy-captcha內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)簡(jiǎn)單的貪吃蛇游戲
這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單的貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
Java JDBC API介紹與實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池流程
JDBC是指Java數(shù)據(jù)庫(kù)連接,是一種標(biāo)準(zhǔn)Java應(yīng)用編程接口( JAVA API),用來(lái)連接 Java 編程語(yǔ)言和廣泛的數(shù)據(jù)庫(kù)。從根本上來(lái)說(shuō),JDBC 是一種規(guī)范,它提供了一套完整的接口,允許便攜式訪問(wèn)到底層數(shù)據(jù)庫(kù),本篇文章我們來(lái)了解JDBC API及數(shù)據(jù)庫(kù)連接池2022-12-12
Java獲取接口的所有實(shí)現(xiàn)類方法總結(jié)示例
這篇文章主要給大家介紹了關(guān)于Java獲取接口的所有實(shí)現(xiàn)類方法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-06-06
Java實(shí)用工具庫(kù)commons-lang3的使用
Apache?Commons?Lang?3是一個(gè)流行的Java實(shí)用工具庫(kù),提供了對(duì)java.lang包的擴(kuò)展,包括字符串操作、正則表達(dá)式處理、數(shù)字操作、日期和時(shí)間操作、隨機(jī)字符串生成和對(duì)象操作等功能2025-03-03
在自定義線程池中捕獲和處理異常實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了在自定義線程池中捕獲和處理異常實(shí)現(xiàn)過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2026-05-05
Spring Cloud Eureka 注冊(cè)與發(fā)現(xiàn)操作步驟詳解
這篇文章主要介紹了Spring Cloud Eureka 注冊(cè)與發(fā)現(xiàn)操作步驟詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
HttpMessageConverter報(bào)文信息轉(zhuǎn)換器的深入講解
在Spring中內(nèi)置了大量的HttpMessageConverter,通過(guò)請(qǐng)求頭信息中的MIME類型,選擇相應(yīng)的HttpMessageConverter,這篇文章主要給大家介紹了關(guān)于HttpMessageConverter報(bào)文信息轉(zhuǎn)換器的相關(guān)資料,需要的朋友可以參考下2022-01-01
如何解決Mybatis-plus中@TableLogic注解失效問(wèn)題
這篇文章主要介紹了如何解決Mybatis-plus中@TableLogic注解失效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05

