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

Java后端圖形驗(yàn)證碼的使用實(shí)例代碼

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

一、驗(yàn)證碼使用邏輯

二、生成驗(yàn)證碼

使用Kaptcha庫生成驗(yàn)證碼

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

1、引入依賴

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

2、生成驗(yàn)證碼

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

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

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í)存儲(chǔ)圖片二進(jìn)制數(shù)據(jù)。

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

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

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

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

返回值格式:生成一個(gè)鍵值對(duì),例如:

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

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

6、緩存驗(yàn)證碼

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

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

  • 轉(zhuǎn)換為大寫:code.toUpperCase()使驗(yàn)證碼不區(qū)分大小寫(用戶輸入a3g7或A3G7均可通過)。
  • 緩存邏輯:
  •  CODE是常量(如"code"),作為緩存Map的鍵。
  •  captchaCache是自定義緩存組件,將key與驗(yàn)證碼文本關(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;
}

三、驗(yàn)證驗(yàn)證碼

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

1、驗(yàn)證驗(yàn)證碼,判斷是否為空

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

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

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

3、刪除驗(yàn)證碼緩存

captchaCache.deleteCaptcha(key);

4、比較驗(yàn)證碼的值

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

總結(jié) 

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

相關(guān)文章

  • autoMapping和autoMappingBehavior的區(qū)別及說明

    autoMapping和autoMappingBehavior的區(qū)別及說明

    這篇文章主要介紹了autoMapping和autoMappingBehavior的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java LRU算法介紹與用法示例

    java LRU算法介紹與用法示例

    這篇文章主要介紹了java LRU算法,簡(jiǎn)單介紹了LRU算法的概念并結(jié)合實(shí)例形式分析了LRU算法的具體使用方法,需要的朋友可以參考下
    2017-09-09
  • java對(duì)ArrayList排序代碼示例

    java對(duì)ArrayList排序代碼示例

    本文通過代碼示例給大家介紹java對(duì)arraylist排序,代碼簡(jiǎn)潔易懂,感興趣的朋友一起學(xué)習(xí)吧
    2015-11-11
  • Java壓縮解壓縮工具類

    Java壓縮解壓縮工具類

    這篇文章主要為大家詳細(xì)介紹了Java壓縮解壓縮工具類,如何壓縮單個(gè)文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Java中List與數(shù)組相互轉(zhuǎn)換實(shí)例分析

    Java中List與數(shù)組相互轉(zhuǎn)換實(shí)例分析

    這篇文章主要介紹了Java中List與數(shù)組相互轉(zhuǎn)換的方法,實(shí)例分析了Java中List與數(shù)組相互轉(zhuǎn)換中容易出現(xiàn)的問題與相關(guān)的解決方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-05-05
  • 如何在Eclipse中設(shè)置Oracle的JDBC

    如何在Eclipse中設(shè)置Oracle的JDBC

    以下是對(duì)在Eclipse中設(shè)置Oracle的JDBC的具體操作方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • java中單雙斜杠的使用圖文詳解

    java中單雙斜杠的使用圖文詳解

    JAVA中的斜杠有正斜杠與反斜杠之分,正斜杠,一般就叫做斜杠,下面這篇文章主要給大家介紹了關(guān)于java中單雙斜杠使用的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • SpringBoot整合redis中的JSON序列化文件夾操作小結(jié)

    SpringBoot整合redis中的JSON序列化文件夾操作小結(jié)

    在我們?nèi)粘5捻?xiàng)目開發(fā)中,使用redis作為緩存,來提高系統(tǒng)訪問速度和緩解系統(tǒng)壓力,在使用中遇到幾個(gè)問題,本文給大家詳細(xì)總結(jié)下,對(duì)SpringBoot整合redis?JSON序列化相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-02-02
  • Java緩存池代碼實(shí)例詳解

    Java緩存池代碼實(shí)例詳解

    本篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單的緩存方法實(shí)例,需要的朋友可以參考下
    2017-04-04
  • 一文詳解SpringBoot響應(yīng)壓縮功能的配置與優(yōu)化

    一文詳解SpringBoot響應(yīng)壓縮功能的配置與優(yōu)化

    Spring Boot的響應(yīng)壓縮功能基于智能協(xié)商機(jī)制,需同時(shí)滿足很多條件,本文主要為大家詳細(xì)介紹了SpringBoot響應(yīng)壓縮功能的配置與優(yōu)化,需要的可以參考下
    2025-03-03

最新評(píng)論

怀宁县| 宜宾县| 青岛市| 澄迈县| 多伦县| 密云县| 毕节市| 马山县| 江口县| 洪湖市| 偏关县| 鲁甸县| 菏泽市| 衡山县| 喀喇沁旗| 香港| 五大连池市| 寿宁县| 广宗县| 松潘县| 桦南县| 江川县| 麟游县| 大理市| 潞城市| 长沙市| 崇明县| 万州区| 获嘉县| 宿松县| 当雄县| 巴东县| 阜新市| 赤壁市| 江安县| 海伦市| 松滋市| 惠东县| 金坛市| 从化市| 石嘴山市|