Spring Boot 驗證碼框架 CAPTCHA詳解
查看 Github 倉庫 | 查看 Gitee 倉庫
簡介人機識別與驗證碼是后端開發中保護接口最常見的方式之一,而此類代碼往往會與業務代碼耦合帶來項目可維護性變差。
CAPTCHA 是一個基于 Spring Boot 的驗證碼框架,它通過 AOP 的方式完成包含驗證碼生成、發送、存儲等驗證碼相關業務,以避免與業務代碼耦合。開發者可以輕松地通過不同組件的組合來完成驗證業務,同時可以進行自定義實現以應對自身的業務需求(例如郵箱驗證碼、短信驗證碼)。
代碼示例導入 Maven 依賴
<dependency> <groupId>cn.dustlight.captcha</groupId> <artifactId>captcha-core</artifactId> <version>0.0.6</version></dependency>
添加注解啟用 CAPTCHA
@SpringBootApplication@EnableCaptcha // 啟用 CAPTCHApublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}
使用注解生產驗證碼
@RequestMapping('/captcha') @SendCode // 生成隨機字符圖像驗證碼并發送 public void captcha(@CodeValue String code) { // 在此處進行自定義的業務,驗證碼的生成、發送與儲存已由注解 ’@SendCode’ 完成。 log.info(code); }
使用注解消費驗證碼(保護接口)
@RequestMapping('/') @VerifyCode public String index(@CodeValue String code) { // 在此處進行自定義的業務,驗證碼的驗證以及銷毀已由注解 ’@VerifyCode’ 完成。 return String.format('Hello World! (%s)', code); }實現原理
CAPTCHA 基于面向切面編程(AOP)思想,將驗證碼業務劃分為兩個切面:
@SendCode
生成驗證碼 儲存驗證碼 發送驗證碼@VerifyCode
讀取驗證碼 進行驗證同時將驗證碼業務抽象為下面幾個接口:
Code—— 驗證碼 CodeGenerator—— 生成器 CodeSender—— 發送器 CodeStore—— 儲存器 CodeVerifier—— 驗證器例子
隨機字符圖像驗證碼的 AOP 實現
業務分析
客戶端訪問驗證碼接口獲取到圖像,同時后端服務將生成的驗證碼儲存在 Session 或者 Redis。 客戶端訪問接口(登錄、注冊等),傳入參數以及驗證碼,后端服務取出驗證碼進行校驗。模塊劃分
業務邏輯
@SendCode
通過 CodeGenerator生成 Code。 通過 CodeStore儲存 Code。 通過 CodeSender輸出 Code。 執行業務代碼。@VerifyCode
從請求參數獲取待驗證的驗證碼。 通過 CodeStore取出 Code。 通過 CodeVerify進行驗證。 驗證完成則執行業務代碼,否則拋出異常。拓展與組合除了圖像驗證碼(人機識別)以外,常見的驗證碼業務或者人機識別業務例如:短信驗證碼、郵箱驗證碼、谷歌 reCAPTCHA 人機識別等都可以通過實現上述接口來完成業務。
例如,想要使用 Redis 儲存驗證碼只需要通過 RedisTemplate實現 CodeStore即可,再通過模塊的組合使用可以輕易地完成自定義的驗證碼業務,同時又不影響業務代碼。
到此這篇關于Spring Boot 驗證碼框架 - CAPTCHA的文章就介紹到這了,更多相關Spring Boot 驗證碼框架內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章:
