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

Spring Boot 驗(yàn)證碼框架 CAPTCHA詳解

 更新時間:2021年03月22日 09:09:38   作者:Hansin1997  
這篇文章主要介紹了Spring Boot 驗(yàn)證碼框架 CAPTCHA詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

CAPTCHA

查看 Github 倉庫 | 查看 Gitee 倉庫

簡介

人機(jī)識別與驗(yàn)證碼是后端開發(fā)中保護(hù)接口最常見的方式之一,而此類代碼往往會與業(yè)務(wù)代碼耦合帶來項(xiàng)目可維護(hù)性變差。

CAPTCHA 是一個基于 Spring Boot 的驗(yàn)證碼框架,它通過 AOP 的方式完成包含驗(yàn)證碼生成、發(fā)送、存儲等驗(yàn)證碼相關(guān)業(yè)務(wù),以避免與業(yè)務(wù)代碼耦合。
開發(fā)者可以輕松地通過不同組件的組合來完成驗(yàn)證業(yè)務(wù),同時可以進(jìn)行自定義實(shí)現(xiàn)以應(yīng)對自身的業(yè)務(wù)需求(例如郵箱驗(yàn)證碼、短信驗(yàn)證碼)。

代碼示例

導(dǎo)入 Maven 依賴

<dependency>
 <groupId>cn.dustlight.captcha</groupId>
 <artifactId>captcha-core</artifactId>
 <version>0.0.6</version>
</dependency>

添加注解啟用 CAPTCHA

@SpringBootApplication
@EnableCaptcha // 啟用 CAPTCHA
public class DemoApplication {
 public static void main(String[] args) {
  SpringApplication.run(DemoApplication.class, args);
 }
}

使用注解生產(chǎn)驗(yàn)證碼

 @RequestMapping("/captcha")
 @SendCode // 生成隨機(jī)字符圖像驗(yàn)證碼并發(fā)送
 public void captcha(@CodeValue String code) {
  // 在此處進(jìn)行自定義的業(yè)務(wù),驗(yàn)證碼的生成、發(fā)送與儲存已由注解 '@SendCode' 完成。
  log.info(code);
 }

使用注解消費(fèi)驗(yàn)證碼(保護(hù)接口)

 @RequestMapping("/")
 @VerifyCode
 public String index(@CodeValue String code) {
  // 在此處進(jìn)行自定義的業(yè)務(wù),驗(yàn)證碼的驗(yàn)證以及銷毀已由注解 '@VerifyCode' 完成。
  return String.format("Hello World! (%s)", code);
 }

實(shí)現(xiàn)原理

CAPTCHA 基于面向切面編程(AOP)思想,將驗(yàn)證碼業(yè)務(wù)劃分為兩個切面:

@SendCode

  1. 生成驗(yàn)證碼
  2. 儲存驗(yàn)證碼
  3. 發(fā)送驗(yàn)證碼

@VerifyCode

  • 讀取驗(yàn)證碼
  • 進(jìn)行驗(yàn)證

同時將驗(yàn)證碼業(yè)務(wù)抽象為下面幾個接口:

  • Code—— 驗(yàn)證碼
  • CodeGenerator—— 生成器
  • CodeSender—— 發(fā)送器
  • CodeStore—— 儲存器
  • CodeVerifier—— 驗(yàn)證器

例子

隨機(jī)字符圖像驗(yàn)證碼的 AOP 實(shí)現(xiàn)

業(yè)務(wù)分析

  •  客戶端訪問驗(yàn)證碼接口獲取到圖像,同時后端服務(wù)將生成的驗(yàn)證碼儲存在 Session 或者 Redis。
  • 客戶端訪問接口(登錄、注冊等),傳入?yún)?shù)以及驗(yàn)證碼,后端服務(wù)取出驗(yàn)證碼進(jìn)行校驗(yàn)。

模塊劃分

接口 實(shí)現(xiàn) 功能/描述
Code Code<String> 字符串型 Code ,內(nèi)有驗(yàn)證碼名、驗(yàn)證碼值。(驗(yàn)證碼名用于區(qū)分不同業(yè)務(wù)的驗(yàn)證碼)
CodeGenerator RandomStringCodeGenerator 隨機(jī)字符串生成,通過參數(shù)配置字符池以及長度。
CodeSender ImageCodeSender 繪制圖像(隨機(jī)字符、干擾線),輸出到 Response。
CodeStore HttpSessionCodeStore 基于 Session 對驗(yàn)證碼進(jìn)行儲存與取出。
CodeVerifier StringEqualsCodeVerifier 字符串比較驗(yàn)證,通過參數(shù)配置是否大小寫敏感以及是否 trim 。

業(yè)務(wù)邏輯

@SendCode

  1. 通過 CodeGenerator生成 Code。
  2. 通過 CodeStore儲存 Code。
  3. 通過 CodeSender輸出 Code。
  4. 執(zhí)行業(yè)務(wù)代碼。

@VerifyCode

  1. 從請求參數(shù)獲取待驗(yàn)證的驗(yàn)證碼。
  2. 通過 CodeStore取出 Code
  3. 通過 CodeVerify進(jìn)行驗(yàn)證。
  4. 驗(yàn)證完成則執(zhí)行業(yè)務(wù)代碼,否則拋出異常。

拓展與組合

除了圖像驗(yàn)證碼(人機(jī)識別)以外,常見的驗(yàn)證碼業(yè)務(wù)或者人機(jī)識別業(yè)務(wù)例如:短信驗(yàn)證碼、郵箱驗(yàn)證碼、谷歌 reCAPTCHA 人機(jī)識別等都可以通過實(shí)現(xiàn)上述接口來完成業(yè)務(wù)。

例如,想要使用 Redis 儲存驗(yàn)證碼只需要通過 RedisTemplate實(shí)現(xiàn) CodeStore即可,再通過模塊的組合使用可以輕易地完成自定義的驗(yàn)證碼業(yè)務(wù),同時又不影響業(yè)務(wù)代碼。

到此這篇關(guān)于Spring Boot 驗(yàn)證碼框架 - CAPTCHA的文章就介紹到這了,更多相關(guān)Spring Boot 驗(yàn)證碼框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Java編程中的synthetic關(guān)鍵字

    淺談Java編程中的synthetic關(guān)鍵字

    這篇文章主要介紹了淺談Java編程中的synthetic關(guān)鍵字的相關(guān)內(nèi)容,包括其簡單的介紹和實(shí)例,需要的朋友可以了解下。
    2017-09-09
  • Java 入門圖形用戶界面設(shè)計(jì)之復(fù)選框

    Java 入門圖形用戶界面設(shè)計(jì)之復(fù)選框

    圖形界面(簡稱GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對于用戶來說在視覺上更易于接受,本篇精講Java語言中關(guān)于圖形用戶界面的復(fù)選框
    2022-02-02
  • Java應(yīng)用注冊成Windows服務(wù)實(shí)現(xiàn)自啟的教程詳解

    Java應(yīng)用注冊成Windows服務(wù)實(shí)現(xiàn)自啟的教程詳解

    這篇文章主要給大家介紹了Java應(yīng)用注冊成Windows服務(wù)實(shí)現(xiàn)自啟的教程,文中有詳細(xì)的代碼示例和圖文講解供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2024-02-02
  • Java創(chuàng)建并運(yùn)行線程的方法

    Java創(chuàng)建并運(yùn)行線程的方法

    這篇文章主要介紹了Java創(chuàng)建并運(yùn)行線程的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Java中的static靜態(tài)變量、靜態(tài)方法超詳細(xì)講解

    Java中的static靜態(tài)變量、靜態(tài)方法超詳細(xì)講解

    Java中的static關(guān)鍵字用于表示靜態(tài)變量和靜態(tài)方法,靜態(tài)變量是類的成員變量,它們屬于類本身,而不是類的實(shí)例,這篇文章主要給大家介紹了關(guān)于Java中static靜態(tài)變量、靜態(tài)方法詳細(xì)講解的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • 如何利用@PreAuthorize注解自定義權(quán)限校驗(yàn)

    如何利用@PreAuthorize注解自定義權(quán)限校驗(yàn)

    通過使用@PreAuthorize注解實(shí)現(xiàn)開放接口的權(quán)限校驗(yàn),具體步驟包括開啟全局方法安全、編寫自定義鑒權(quán)方法、創(chuàng)建自定義異常類、在統(tǒng)一異常處理類中捕獲異常并處理,最后在需要鑒權(quán)的接口上貼上注解
    2024-12-12
  • 使用Springboot搭建OAuth2.0 Server的方法示例

    使用Springboot搭建OAuth2.0 Server的方法示例

    這篇文章主要介紹了使用Springboot搭建OAuth2.0 Server的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • java編程 中流對象選取規(guī)律詳解

    java編程 中流對象選取規(guī)律詳解

    下面小編就為大家?guī)硪黄猨ava編程 中流對象選取規(guī)律詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 詳解使用Maven構(gòu)建多模塊項(xiàng)目(圖文)

    詳解使用Maven構(gòu)建多模塊項(xiàng)目(圖文)

    這篇文章主要介紹了詳解使用Maven構(gòu)建多模塊項(xiàng)目(圖文),非常具有實(shí)用價值,需要的朋友可以參考下
    2017-09-09
  • Java 在Excel中添加分離型餅圖、環(huán)形圖的方法

    Java 在Excel中添加分離型餅圖、環(huán)形圖的方法

    這篇文章主要介紹了Java 在Excel中添加分離型餅圖、環(huán)形圖的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12

最新評論

凤阳县| 桐城市| 班玛县| 绍兴县| 朔州市| 久治县| 略阳县| 德昌县| 舞钢市| 盐城市| 紫云| 新田县| 太谷县| 普格县| 资阳市| 右玉县| 兰考县| 长武县| 满城县| 牡丹江市| 隆德县| 潞城市| 鸡西市| 邳州市| 苏州市| 安图县| 盖州市| 陇南市| 尖扎县| 榆林市| 新野县| 衢州市| 留坝县| 法库县| 鲁甸县| 奉节县| 锡林郭勒盟| 涞水县| 明水县| 连州市| 石首市|