1.一種基于緩存的驗證碼校驗方法,其特征在于,包括如下步驟:
S1,客戶端向驗證碼服務(wù)器系統(tǒng)請求生成驗證碼,驗證碼服務(wù)器系統(tǒng)包括多個驗證碼服務(wù)器,任意一個驗證碼服務(wù)器接受請求,生成并向所述客戶端返回加密字符串,并將動態(tài)生成的數(shù)據(jù)保存至緩存服務(wù)器;
S2,所述客戶端向所述驗證碼服務(wù)器系統(tǒng)請求獲取所述加密字符串對應(yīng)的圖片,任意一個驗證碼服務(wù)器接受請求,對所述加密字符串進行解密,獲取原始驗證碼內(nèi)容和原始請求時間;
S3,判斷所述原始請求時間與當(dāng)前時間的距離是否超過緩存服務(wù)器中設(shè)置的驗證碼有效期,如果是,則不返回任何內(nèi)容,否則,跳至S4;
S4,在緩存服務(wù)器的圖片黑名單中查詢所述加密字符串是否請求過驗證碼圖片,如果是,則不返回任何內(nèi)容,否則,生成并向所述客戶端返回所述加密字符串對應(yīng)的圖片,并將所述加密字符串保存至緩存服務(wù)器的所述圖片黑名單中;
S5,所述客戶端輸入所述加密字符串和所述圖片的驗證碼,并向所述驗證碼服務(wù)器系統(tǒng)請求校驗,任意一個驗證碼服務(wù)器接受請求,對所述加密字符串進行解密,如果解密失敗,則校驗失敗,否則,執(zhí)行S6;
S6,在緩存服務(wù)器的驗證黑名單中查詢所述加密字符串是否被驗證過,如果是,則校驗失敗,否則,抽取解密后的數(shù)據(jù),匹配當(dāng)前時間和所述原始請求時間,如果時間尚在有效期內(nèi),則匹配用戶輸入的驗證碼和所述原始驗證碼內(nèi)容,如果匹配成功,則校驗成功,否則,校驗失敗。
2.根據(jù)權(quán)利要求1所述的基于緩存的驗證碼校驗方法,其特征在于,S6之后還包括步驟,無論匹配是否成功,都將所述加密字符串放入緩存服務(wù)器的所述驗證黑名單中。
3.根據(jù)權(quán)利要求2所述的基于緩存的驗證碼校驗方法,其特征在于,所述圖片黑名單和所述驗證黑名單中的緩存服務(wù)器有效期長于所述驗證碼有效期。
4.根據(jù)權(quán)利要求1所述的基于緩存的驗證碼校驗方法,其特征在于,所述加密字符串的格式為:[驗證碼]_[時間戳]_[隨機數(shù)]。
5.根據(jù)權(quán)利要求4所述的基于緩的驗證碼校驗方法,其特征在于,所述驗證碼的寬度根據(jù)配置設(shè)置,字符空間是阿拉伯?dāng)?shù)字和英文大小寫,所述時間戳為所述加密字符串的生成時間距離1970年1月1日0時的毫秒數(shù)。
6.根據(jù)權(quán)利要求1所述的基于緩存的驗證碼校驗方法,其特征在于,S4中,所述生成所述加密字符串對應(yīng)的圖片,具體為,采用開放源代碼的kaptcha驗證碼生成組件。
7.根據(jù)權(quán)利要求1所述的基于緩存的驗證碼校驗方法,其特征在于,S1中,所述生成加密字符串,具體為,采用XXTEA的加密算法,并在加密之后進行Base64編碼。
8.一種基于緩存的驗證碼校驗系統(tǒng),其特征在于,包括:
客戶端,用于向驗證碼服務(wù)器系統(tǒng)請求生成驗證碼、獲取所述加密字符串對應(yīng)的圖片、輸入所述加密字符串和所述圖片的驗證碼以及向所述驗證碼服務(wù)器系統(tǒng)請求校驗驗證碼;
驗證碼服務(wù)器系統(tǒng),包括多個驗證碼服務(wù)器,且每個驗證碼服務(wù)器的功能相同,均用于接受所述客戶端請求,并用于執(zhí)行以下操作:生成并向所述客戶端返回加密字符串,并將動態(tài)生成的數(shù)據(jù)保存至緩存服務(wù)器;對所述加密字符串進行解密,獲取原始驗證碼內(nèi)容和原始請求時間;判斷所述原始請求時間與當(dāng)前時間的距離是否超過緩存服務(wù)器中設(shè)置的驗證碼有效期;在緩存服務(wù)器的圖片黑名單中查詢所述加密字符串是否請求過驗證碼圖片,生成并向所述客戶端返回所述加密字符串對應(yīng)的圖片,并將所述加密字符串保存至緩存服務(wù)器的所述圖片黑名單中;在緩存服務(wù)器的驗證黑名單中查詢所述加密字符串是否被驗證過,抽取解密后的數(shù)據(jù),匹配當(dāng)前時間和所述原始請求時間,如果時間尚在有效期內(nèi),則匹配用戶輸入的驗證碼和所述原始驗證碼內(nèi)容;
緩存服務(wù)器,與所述驗證碼服務(wù)器系統(tǒng)中的每個驗證碼服務(wù)器數(shù)據(jù)連接,用于每個驗證碼服務(wù)器的數(shù)據(jù)存儲和調(diào)用。