Kaptcha
Kaptcha 是一個用于生成和驗證驗證碼的 Java 庫,提供了豐富的生成和驗證功能,并支持自定義配置。它可以用于增加應用程序的安全性,防止機器人和惡意攻擊。
Kaptcha 可以生成各種類型的驗證碼,包括數字、字母、數字字母組合等。生成的驗證碼圖片可以以圖片流或
Base64 編碼的形式輸出,方便在 Web 應用程序中使用。
在驗證碼驗證方面,Kaptcha 提供了驗證器接口,可以用于驗證用戶輸入的驗證碼是否正確。開發人員可以根據需要自定義驗證邏輯,以滿足特定的業務需求。
1、添加依賴
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
2、配置類
3.應用校驗圖片進行登錄
頁面顯示
可以使用異步設置img1.src=“/kaptcha.jpg?t=”+Math.random 請求中的t參數實際上服務器端并不進行接收,主要是避免客戶端緩存問題
使用 session 進行驗證
當用戶輸入驗證碼后提交數據,則從 session 中獲取以前存儲的驗證碼,和當前用戶提交的驗證碼進行比對,
如果相等則通過,否則報錯
注意:手機號碼的驗證也是這樣的思路。而郵箱地址的驗證是通過添加后激活的方式實現
如果需要使用 rememberme 功能也可以利用 Redis 實現,將用戶的登錄信息記錄在 Redis 緩存中,將 uuid 值
作為傳遞標識傳遞到客戶端,存儲到 cookie 中
Cookie ck=new Cookie(“ticket”,uuid);
ck.setPath(contextPath);
ck.setMaxAge(過期時間);
response.addCookie(ck);
Kaptcha 在分布式應用中可以通過共享配置、統一存儲、負載均衡和結果同步等方式來保證驗證碼的一致性和
驗證的準確性。這樣分布式應用程序可以在不同的服務器上生成和驗證相同的驗證碼。
1、共享配置:在分布式環境中,建議將 Kaptcha 的配置信息集中存儲在共享的配置中心或數據庫中。這樣,
所有的服務器都可以從同一個配置源獲取相同的驗證碼配置,包括驗證碼長度、字體樣式、干擾線等。
2、驗證碼存儲:如果需要在分布式環境中驗證用戶輸入的驗證碼,建議將驗證碼和相關驗證信息存儲在共享
的存儲介質中,如數據庫或緩存。這樣,不同的服務器可以共享并驗證相同的驗證碼信息。
3、負載均衡:如果使用負載均衡器來分發請求到不同的服務器,確保請求的會話保持一致性。這樣,用戶在一個服務器上生成的驗證碼可以在其他服務器上驗證。
4、驗證結果同步:如果需要將驗證碼的驗證結果同步到其他服務器,可以使用分布式消息隊列或其他同步機
制來確保驗證結果在各個服務器之間同步。