欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java后端圖形驗證碼的使用實例代碼

 更新時間:2025年04月30日 08:59:16   作者:小陳09  
這篇文章主要介紹了Java后端圖形驗證碼的相關(guān)資料,通過示例代碼講解了如何使用Kaptcha庫生成驗證碼,并通過Base64編碼傳輸給前端,前端將驗證碼文本發(fā)送到后端進行驗證,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

一、驗證碼使用邏輯

二、生成驗證碼

使用Kaptcha庫生成驗證碼

這里使用的是后端調(diào)用Kaptcha庫生成驗證碼的二進制字符串,傳給前端,由前端轉(zhuǎn)為圖片

1、引入依賴

		<dependency>
			<groupId>com.github.penggle</groupId>
			<artifactId>kaptcha</artifactId>
			<version>2.3.2</version>
		</dependency>

2、生成驗證碼

// 生成驗證碼
String code = kaptchaProducer.createText();

3、根據(jù)文本生成驗證碼圖片(BufferedImage對象)

BufferedImage kaptchaImage = kaptchaProducer.createImage(code);

4、將圖片轉(zhuǎn)換為Base64

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(kaptchaImage, "jpg", outputStream);
String base64Img = Base64.getEncoder().encodeToString(outputStream.toByteArray());

ByteArrayOutputStream:內(nèi)存輸出流,用于臨時存儲圖片二進制數(shù)據(jù)。

ImageIO.write:將BufferedImage以JPEG格式寫入輸出流。

Base64編碼:將二進制圖片數(shù)據(jù)轉(zhuǎn)換為Base64字符串,便于前端通過直接顯示。

5、構(gòu)造返回前端的響應(yīng)

Map<String, String> imgMap = new HashMap<>();
imgMap.put(key, "data:image/jpeg;base64," + base64Img);

返回值格式:生成一個鍵值對,例如:

{ "captchaKey": "data:image/jpeg;base64,/9j/4AAQSkZJRgA..." }

key的作用:前端提交驗證碼時需攜帶此鍵,服務(wù)端通過它從緩存中獲取正確的驗證碼文本。

6、緩存驗證碼

Map<String, String> cacheMap = new HashMap<>();
cacheMap.put(CODE, code.toUpperCase());
captchaCache.putCaptcha(key, cacheMap);

Google Guava 緩存庫實現(xiàn)的驗證碼緩存組件,用于在單節(jié)點部署環(huán)境中存儲和驗證驗證碼信息。

  • 轉(zhuǎn)換為大寫:code.toUpperCase()使驗證碼不區(qū)分大小寫(用戶輸入a3g7或A3G7均可通過)。
  • 緩存邏輯:
  •  CODE是常量(如"code"),作為緩存Map的鍵。
  •  captchaCache是自定義緩存組件,將key與驗證碼文本關(guān)聯(lián),通常設(shè)置有效期
@Override
public boolean putCaptcha(String key, Map<String, String> value) {
    try {
        cache.put(key, JSONObject.fromObject(value).toString());
    } catch (Exception ex) {
        return false;
    }
    return true;
}

三、驗證驗證碼

一般在調(diào)用登錄接口前驗證驗證碼,通過SpringMVC的攔截器實現(xiàn)

1、驗證驗證碼,判斷是否為空

		if(StringUtil.isEmpty(key)) {
			throw new BadRequestAlertException(ErrorConstants.CAPTCHA_TYPE, "The information of captcha is missing", "captcha.header", "missing");
		}

2、獲取驗證碼(如果驗證碼過期則無法獲取到)

Map<String, String> validateMap = captchaCache.getCaptcha(key);

3、刪除驗證碼緩存

captchaCache.deleteCaptcha(key);

4、比較驗證碼的值

		if(captcha.get(CODE).equalsIgnoreCase(validateMap.get(CODE))){
			return true;
		}

總結(jié) 

到此這篇關(guān)于Java后端圖形驗證碼使用的文章就介紹到這了,更多相關(guān)Java后端圖形驗證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 通過JDBC連接oracle數(shù)據(jù)庫的十大技巧

    通過JDBC連接oracle數(shù)據(jù)庫的十大技巧

    通過JDBC連接oracle數(shù)據(jù)庫的十大技巧...
    2006-12-12
  • Mybatis-Plus中update()和updateById()將字段更新為null

    Mybatis-Plus中update()和updateById()將字段更新為null

    本文主要介紹了Mybatis-Plus中update()和updateById()將字段更新為null,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • lombok的@EqualsAndHashcode注解詳解

    lombok的@EqualsAndHashcode注解詳解

    這篇文章主要介紹了lombok的@EqualsAndHashcode注解的用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 解析HashMap中的put方法執(zhí)行流程

    解析HashMap中的put方法執(zhí)行流程

    在Java集合中,HashMap的重要性不言而喻,作為一種存儲鍵值對的數(shù)據(jù)結(jié)構(gòu),它在日常開發(fā)中有著非常多的應(yīng)用場景,也是面試中的高頻考點,本篇文章就來分析一下HashMap集合中的put方法
    2021-12-12
  • SpringBoot中HTTP請求不通的原因級解決方法

    SpringBoot中HTTP請求不通的原因級解決方法

    HTTP 請求是指從客戶端到服務(wù)器的請求消息,對于一個 Spring Boot 項目而言,服務(wù)器就是 Spring Boot,客戶端就是用戶本地的瀏覽器,但是會遇到SpringBoot HTTP請求不通的問題,本文介紹了一些常見問題及解決方法,需要的朋友可以參考下
    2025-02-02
  • Dubbo之降級Mock源碼分析

    Dubbo之降級Mock源碼分析

    這篇文章主要為大家介紹了Dubbo降級Mock源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • 解決idea的debug模式突然變卡,項目啟動變慢的狀況

    解決idea的debug模式突然變卡,項目啟動變慢的狀況

    這篇文章主要介紹了解決idea的debug模式突然變卡,項目啟動變慢的狀況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • IntelliJ IDEA像Eclipse一樣打開多個項目的圖文教程

    IntelliJ IDEA像Eclipse一樣打開多個項目的圖文教程

    這篇文章主要介紹了IntelliJ IDEA像Eclipse一樣打開多個項目的方法圖文教程講解,需要的朋友可以參考下
    2018-03-03
  • Java 添加超鏈接到 Word 文檔方法詳解

    Java 添加超鏈接到 Word 文檔方法詳解

    這篇文章主要介紹了Java 添加超鏈接到 Word 文檔方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解Spring MVC/Boot 統(tǒng)一異常處理最佳實踐

    詳解Spring MVC/Boot 統(tǒng)一異常處理最佳實踐

    在 Web 開發(fā)中, 我們經(jīng)常會需要處理各種異常,這篇文章主要介紹了詳解Spring MVC/Boot 統(tǒng)一異常處理最佳實踐,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論