大家好,我是 Java陳序員
。
今天,給大家介紹一個開源的基於 Java 實現的行為驗證碼工具!
關注微信公眾號:【Java陳序員】,獲取開源專案分享、AI副業分享、超200本經典計算機電子書籍等。
專案介紹
TIANAI-CAPTCHA
—— 天愛驗證碼,基於 Java 實現的開源行為驗證碼,涵蓋滑塊驗證碼、旋轉驗證碼、滑動還原驗證碼、文字點選驗證碼等等。
專案截圖
- 滑塊驗證碼
- 旋轉驗證碼
- 滑動還原驗證碼
- 文字點選驗證碼
快速上手
1、引入依賴
<dependency>
<groupId>cloud.tianai.captcha</groupId>
<artifactId>tianai-captcha</artifactId>
<version>1.5.1</version>
</dependency>
2、使用 ImageCaptchaApplication
生成和校驗驗證碼
public class TianAiCaptcha {
public static void main(String[] args) {
// 1、構建 ImageCaptchaApplication
ImageCaptchaApplication imageCaptchaApplication = TACBuilder.builder()
// 1.1 新增預設模板 -- 可自定義新增模板
.addDefaultTemplate()
// 1.2 新增驗證碼資源資訊 引數一:驗證碼型別(參考 CaptchaTypeConstant) 引數二:Resource("classpath/file/url", "圖片路徑")
// 新增【滑塊驗證碼】資源,背景圖來自類路徑下 背景圖大小為:600 * 360
.addResource(CaptchaTypeConstant.SLIDER, new Resource("classpath", "META-INF/cut-image/resource/1.jpg"))
// 1.2.1 新增【旋轉驗證碼】資源,背景圖來自檔案系統
.addResource(CaptchaTypeConstant.ROTATE, new Resource("file", "E:\\CodeChen.png"))
// 1.2.2 新增【滑動還原驗證碼】資源,背景圖來自遠端地址
.addResource(CaptchaTypeConstant.CONCAT, new Resource("url", "https://chencoding.top:8090/_media/logo_2.png"))
// 1.2.3 新增【文字點驗證碼】資源,背景圖來自類路徑下
.addResource(CaptchaTypeConstant.WORD_IMAGE_CLICK, new Resource("classpath", "META-INF/cut-image/resource/1.jpg"))
.build();
// 2、生成驗證碼
// 2.1 生成驗證碼的型別必須在 ImageCaptchaApplication 先新增對應的資源,否則會提示:【隨機獲取資源錯誤,store中資源為空, type:SLIDER,tag:null】
CaptchaResponse<ImageCaptchaVO> response = imageCaptchaApplication.generateCaptcha(CaptchaTypeConstant.CONCAT);
System.out.println(response);
// 2.2 驗證碼模板圖片
System.out.println(response.getCaptcha().getTemplateImage());
// 2.3 驗證碼背景圖片
System.out.println(response.getCaptcha().getBackgroundImage());
// 3、校驗驗證碼:id 和 ImageCaptchaTrack 需要前端傳來引數
String id = response.getId();
ImageCaptchaTrack imageCaptchaTrack = new ImageCaptchaTrack();
ApiResponse<?> valid = imageCaptchaApplication.matching(id, imageCaptchaTrack);
System.out.println(valid.isSuccess());
}
}
3、更多 API 可參考文末的線上文件。
SpringBoot 專案整合
1、引入依賴
<dependency>
<groupId>cloud.tianai.captcha</groupId>
<artifactId>tianai-captcha-springboot-starter</artifactId>
<version>1.5.1</version>
</dependency>
2、配置驗證碼生成校驗相關配置
# 驗證碼配置,詳細請看 cloud.tianai.captcha.autoconfiguration.ImageCaptchaProperties 類
captcha:
# 如果專案中使用到了 Redis, 滑塊驗證碼會自動把驗證碼資料存到 Redis 中,這裡配置 Redis 的 key 的字首 預設是 captcha:slider
prefix: captcha
# 驗證碼過期時間,預設:2 分鐘,單位:毫秒
expire:
# 預設快取時間 2分鐘
default: 10000
# 針對【點選驗證碼】的配置,因為點選驗證碼驗證比較慢,把過期時間調整大一些
WORD_IMAGE_CLICK: 20000
# 使用載入系統自帶的資源,預設是 false(這裡系統的預設資源包含滑動驗證碼模板/旋轉驗證碼模板,如果想使用系統的模板,這裡設定為true)
init-default-resource: true
# 快取控制,預設為 false 不開啟
local-cache-enabled: true
# 驗證碼會提前快取一些生成好的驗證資料,預設是 20
local-cache-size: 20
# 快取拉取失敗後等待時間 預設是 5 秒鐘
local-cache-wait-time: 5000
# 快取檢查間隔 預設是 2 秒鐘
local-cache-period: 2000
# 配置字型包,供文字點選驗證碼使用,可以配置多個,不配置使用預設的字型
font-path:
- classpath:font/SimHei.ttf
secondary:
# 二次驗證,預設 false 不開啟
enabled: false
# 二次驗證過期時間,預設 2 分鐘
expire: 120000
# 二次驗證快取 key 字首,預設是 captcha:secondary
keyPrefix: "captcha:secondary"
3、使用 ImageCaptchaApplication
生成和校驗驗證碼
@RestController
@RequestMapping("captcha")
public class CaptchaController {
@Autowired
private ImageCaptchaApplication imageCaptchaApplication;
@GetMapping("/generate")
public Result<CaptchaResponse<ImageCaptchaVO> > generate() {
CaptchaResponse<ImageCaptchaVO> response = imageCaptchaApplication.generateCaptcha(CaptchaTypeConstant.SLIDER);
return Result.success(response);
}
@PostMapping("/valid/${id}")
public Result<Boolean> valid(@PathVariable String id,
@RequestBody ImageCaptchaTrack imageCaptchaTrack) {
boolean valid = imageCaptchaApplication.matching(id, imageCaptchaTrack).isSuccess();
return Result.success(valid);
}
}
4、更多 API 可參考文末的線上文件。
TIANAI-CAPTCHA
除了提供後端整合的 SDK, 還提供了前端整合的 SDK, 這裡不再贅述,相關使用以及更多的 API 配置可參考線上文件。
線上文件:http://doc.captcha.tianai.cloud/
TIANAI-CAPTCHA
提供了多種行為驗證碼的快速整合,可以說是 Java 界中最好用的開源行為驗證碼工具。
如果開發中,需要涉及到驗證碼設計,可以試試使用~
專案地址:https://gitee.com/dromara/tianai-captcha
最後
推薦的開源專案已經收錄到 GitHub
專案,歡迎 Star
:
https://github.com/chenyl8848/great-open-source-project
或者訪問網站,進行線上瀏覽:
https://chencoding.top:8090/#/
大家的點贊、收藏和評論都是對作者的支援,如文章對你有幫助還請點贊轉發支援下,謝謝!