是驗證碼的意思(如圖),
原本我是在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。 如圖一
圖一 |
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");
}
這樣就大功告成了。