30 May 2011
CAPTCHA,相信大家不陌生,
是驗證碼的意思(如圖),











原本我是在Google App Engine中,自己畫出那些驗證碼的數字!
在local端可以繪出圖形來,但是deploy上去GAE以後,
就失敗了,原因是因為有個class並不被GAE支援。
因此無法繪圖。

我也懶得找其他的solution,第一個念頭就是找是否有相關的API。
找到了reCAPTCHA(被Google買的)。

接下來就來說明reCAPTCHA如何整合及運作。
reCAPTCHA提供了兩種方法,讓開發者將reCAPTCHA整合至自己的網站中,
1) using plugin.
2) writing code to communicate with our servers.
第一種就是Google已經以大部分的程式語言撰寫出一個套件讓開發者使用。
第二種就是寫一些簡單的code和他們的server進行溝通(驗證)
兩種其實都不難,都很簡單。

但這裡我就先教大家第一種。
1) 首先請大家先至此網站進行申請,輸入您要使用reCAPTCHA的domain。 如圖一

圖一
2) 輸入完成以後,會得到兩組key,一組是public,一組是private。

3) 申請完成以後,就選擇你要以哪種程式語言進行整合。(這裡選JAVA)

4) 來此處下載lib(recaptcha4j-0.0.7.jar),並且放進去project。

5) 接著就開始coding。

先撰寫client端要顯示CAPTCHA圖片的code

1) 首先先撰寫client端的code,先import需要的class
<%@ page import="net.tanesha.recaptcha.ReCaptcha" %>
<%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %>


2) 建立一個intance以準備create一個captcha,記得填入自己的public、private key。
第三個參數在官方文件中並沒有說明,但是去看source code,是"includeNoscript"的意思,
意思是說此instance(object)是否包含Noscript,而這邊是沒有,所以是false
ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false);



3) 利用剛剛object的顯示出CAPTCHA來。
第一個參數(errorMessage)是指當有錯誤時要顯示甚麼樣的訊息
第二個參數(options)是指一些要給此object的一些特別屬性(如:theme)
c.createRecaptchaHtml(null, null)




接下來就寫server端驗證的code!

String remoteAddr = request.getRemoteAddr();
ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
reCaptcha.setPrivateKey("your_private_key");

String challenge = request.getParameter("recaptcha_challenge_field"); //這個參數是要給server要求驗證的
String uresponse = request.getParameter("recaptcha_response_field"); //這個參數是使用者輸入的參數!
ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remoteAddr, challenge, uresponse);

if (reCaptchaResponse.isValid()) {
out.print("Answer was entered correctly!");
} else {
out.print("Answer is wrong");
}




這樣就大功告成了。


blog comments powered by Disqus