最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成圖片驗證碼框架easy-captcha的詳細過程

 更新時間:2025年03月04日 11:23:39   作者:shy好好學習  
本文介紹了如何將Easy-Captcha框架集成到SpringBoot項目中,實現(xiàn)圖片驗證碼功能,Easy-Captcha是一款輕量級的開源驗證碼框架,通過簡潔的API和高度可定制性,可以快速實現(xiàn)驗證碼功能,文章詳細介紹了如何配置、生成和展示驗證碼,并提供了Easy-Captcha的GitHub地址

SpringBoot集成圖片驗證碼框架easy-captcha

此項目已經很久未維護,如有更好的選擇,建議使用更好的選擇!!!

一、引言

驗證碼(CAPTCHA)是現(xiàn)代應用中防止機器人攻擊、保護接口安全的核心手段之一。然而,從零開發(fā)驗證碼模塊需要處理圖形渲染、算法設計、安全防護等諸多復雜問題。Easy-Captcha 作為一款輕量級開源驗證碼框架,以簡潔的API和高度可定制性成為開發(fā)者的優(yōu)選方案。下面我們將介紹如何將Easy-Captcha框架整合到SpringBoot項目中。

二、依賴

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

三、代碼

1. EasyCaptcha配置類

我們可以修改EasyCaptchaTypeEnum的枚舉值來使用不同的驗證碼類型

@Configuration
@Data
public class EasyCaptchaConfig {
    /**
     * 驗證碼類型
     */
    private EasyCaptchaTypeEnum type = EasyCaptchaTypeEnum.GIF;
    /**
     * 驗證碼緩存過期時間(單位:秒)
     */
    private long ttl = 120L;
    /**
     * 驗證碼內容長度
     */
    private int length = 4;
    /**
     * 驗證碼寬度
     */
    private int width = 120;
    /**
     * 驗證碼高度
     */
    private int height = 36;
    /**
     * 驗證碼字體
     */
    private String fontName = "Verdana";
    /**
     * 字體風格
     */
    private Integer fontStyle = Font.PLAIN;
    /**
     * 字體大小
     */
    private int fontSize = 20;
}

2. EasyCaptchaTypeEnum枚舉類

/**
 * @desc: EasyCaptcha 驗證碼類型枚舉
 * @author: shy
 * @date: 2025/02/27 16:55
 */
public enum EasyCaptchaTypeEnum {
    /**
     * 算數(shù)
     */
    ARITHMETIC,
    /**
     * 中文
     */
    CHINESE,
    /**
     * 中文閃圖
     */
    CHINESE_GIF,
    /**
     * 閃圖
     */
    GIF,
    /**
     * png格式驗證碼
     */
    SPEC
}

3. 驗證碼生成器

/**
 * @desc: 驗證碼生成器
 * @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ù)運算表達式
                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("驗證碼配置信息錯誤!正確配置查看 CaptchaTypeEnum ");
        }
        // 使用默認字體即可解決中文亂碼問題
        captcha.setFont(new Font(fontName, captchaConfig.getFontStyle(), captchaConfig.getFontSize()));
        return captcha;
    }
}

4. 驗證碼生成Service

/**
 * @desc: EasyCaptcha 業(yè)務類
 * @author: shy
 * @date: 2025/02/27 17:02
 */
@Component
@RequiredArgsConstructor
public class EasyCaptchaService {
    private final EasyCaptchaProducer easyCaptchaProducer;
    private final EasyCaptchaConfig captchaConfig;
    /**
     * 獲取EasyCaptcha圖片驗證碼
     *
     * @param
     * @return Captcha
     * @throws
     * @author shy
     * @date 2025/02/27 22:18
     */
    public Captcha getCaptcha() {
        // 獲取驗證碼
        Captcha captcha = easyCaptchaProducer.getCaptcha();
        // 驗證碼文本
        String captchaText = captcha.text();
        // todo 驗證碼文本存儲Redis比對
        System.out.println("驗證碼文本:" + captchaText);
        return captcha;
    }
}

5. 對外接口

@GetMapping("/getEasyCaptcha")
@ApiOperation(value = "獲取EasyCaptcha圖片驗證碼", notes = "獲取EasyCaptcha圖片驗證碼", httpMethod = "GET")
public void getEasyCaptcha() {
    Captcha captcha = captchaService.getCaptcha();
    try {
        captcha.out(response.getOutputStream());
        // 以上兩種方式都可以輸出圖片驗證碼
        //CaptchaUtil.out(captcha, request, response);
    } catch (IOException e) {
        throw new RuntimeException();
    }
    super.getEasyCaptcha();
}

四、驗證碼展示

SHY QR Code

動態(tài)驗證碼

SHY QR Code

中文驗證碼

SHY QR Code

png格式驗證碼

五、總結

Easy-Captcha 通過模塊化設計平衡了安全性與開發(fā)效率,其源碼結構清晰(僅核心類約15個),適合二次開發(fā)。無論是快速實現(xiàn)基礎驗證功能,還是構建企業(yè)級人機驗證系統(tǒng),該框架都能提供可靠支持。建議結合具體業(yè)務需求,在驗證碼樣式、驗證流程上做深度定制。

GitHub 地址:https://github.com/whvcse/EasyCaptcha

到此這篇關于SpringBoot集成圖片驗證碼框架easy-captcha的文章就介紹到這了,更多相關SpringBoot驗證碼easy-captcha內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java實現(xiàn)簡單的貪吃蛇游戲

    Java實現(xiàn)簡單的貪吃蛇游戲

    這篇文章主要介紹了Java實現(xiàn)簡單的貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java JDBC API介紹與實現(xiàn)數(shù)據庫連接池流程

    Java JDBC API介紹與實現(xiàn)數(shù)據庫連接池流程

    JDBC是指Java數(shù)據庫連接,是一種標準Java應用編程接口( JAVA API),用來連接 Java 編程語言和廣泛的數(shù)據庫。從根本上來說,JDBC 是一種規(guī)范,它提供了一套完整的接口,允許便攜式訪問到底層數(shù)據庫,本篇文章我們來了解JDBC API及數(shù)據庫連接池
    2022-12-12
  • Java獲取接口的所有實現(xiàn)類方法總結示例

    Java獲取接口的所有實現(xiàn)類方法總結示例

    這篇文章主要給大家介紹了關于Java獲取接口的所有實現(xiàn)類方法的相關資料,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-06-06
  • Java實用工具庫commons-lang3的使用

    Java實用工具庫commons-lang3的使用

    Apache?Commons?Lang?3是一個流行的Java實用工具庫,提供了對java.lang包的擴展,包括字符串操作、正則表達式處理、數(shù)字操作、日期和時間操作、隨機字符串生成和對象操作等功能
    2025-03-03
  • Java?精煉解讀類和對象原理

    Java?精煉解讀類和對象原理

    面向對象乃是Java語言的核心,是程序設計的思想。Java語言的面向對象技術包括了面向對象和面向過程的基本概念,面向對象的特征,Java語言的類,對象,修飾符,抽象類等一系列的知識點
    2022-03-03
  • 在自定義線程池中捕獲和處理異常實現(xiàn)過程

    在自定義線程池中捕獲和處理異常實現(xiàn)過程

    這篇文章主要介紹了在自定義線程池中捕獲和處理異常實現(xiàn)過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-05-05
  • Spring Cloud Eureka 注冊與發(fā)現(xiàn)操作步驟詳解

    Spring Cloud Eureka 注冊與發(fā)現(xiàn)操作步驟詳解

    這篇文章主要介紹了Spring Cloud Eureka 注冊與發(fā)現(xiàn)操作步驟詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • HttpMessageConverter報文信息轉換器的深入講解

    HttpMessageConverter報文信息轉換器的深入講解

    在Spring中內置了大量的HttpMessageConverter,通過請求頭信息中的MIME類型,選擇相應的HttpMessageConverter,這篇文章主要給大家介紹了關于HttpMessageConverter報文信息轉換器的相關資料,需要的朋友可以參考下
    2022-01-01
  • 如何解決Mybatis-plus中@TableLogic注解失效問題

    如何解決Mybatis-plus中@TableLogic注解失效問題

    這篇文章主要介紹了如何解決Mybatis-plus中@TableLogic注解失效問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java設計模式中的原型模式講解

    Java設計模式中的原型模式講解

    原型模式是用于創(chuàng)建重復的對象,同時又能保證性能。這種類型的設計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式,今天通過本文給大家介紹下Java?原型設計模式,感興趣的朋友一起看看吧
    2023-04-04

最新評論

当雄县| 武定县| 九龙城区| 雷山县| 黑山县| 岚皋县| 浦江县| 南漳县| 山东省| 竹山县| 丰宁| 常山县| 盐池县| 渭南市| 江口县| 苍梧县| 凤城市| 彰武县| 克山县| 澎湖县| 瑞丽市| 常宁市| 玛纳斯县| 太和县| 苏州市| 潢川县| 米林县| 托克逊县| 铜川市| 从化市| 江津市| 湘潭市| 台中县| 曲松县| 贵港市| 林口县| 科技| 右玉县| 大城县| 阜康市| 边坝县|