Google App Engine已推知有年,之前研究所時有帶學弟去實作此雲端平台的應用,而現階段
因為此為免費之平台,且近半年也有學寫簡單的JSP/Servlet code,所以想說做個小工具供自
己使用。
雖然GAE為免費的平台,但總是會對原本開發的環境給予一些限制,這些細部資料都可以去
官網查詢。如在此我使用Java來實作,某些原本JDK提供的API就無法使用了,因此在這邊我
雖然整合了ReCaptcha來做驗證碼輸入,不過是侷限在剛好這個plugin是google推的,一開始是
打算使用SimpleCaptcha,不過剛好java.awt.image.BufferedImage不支援,因此就選擇此囉!
1. 首先可以自https://code.google.com/p/recaptcha/downloads/list?q=label:java-Latest下載Library
2. 下載好請放至war\WEB-INF\lib內,並且加至Eclipse - Java Build Path內
3. 至於前端的code
LifeToolUtil.ReCaptcha_public_key, LifeToolUtil.ReCaptcha_private_key為我所定義的
class LifeToolUtil內的field,而此key您可以自此頁面取得,如下圖
5. 再來就是當送出表單時,後端code的處理,如下:
先取得這三個值(remoteAddr, challenge, uresponse),如此方可以利用ReCaptcha的method來驗
證是否正確!一樣地利用自定義的LifeToolUtil class的method check_ReCaptcha_answer來幫我
檢驗,method code如下:
在此只是將官方提供的code把他包成我想使用的方式,並沒有做多大的變化!
參考網址如下:https://developers.google.com/recaptcha/docs/java
注意!! 最後Deploy to App Engine時,記得要申請過新的Key(由於Domain不一樣)
因為此為免費之平台,且近半年也有學寫簡單的JSP/Servlet code,所以想說做個小工具供自
己使用。
雖然GAE為免費的平台,但總是會對原本開發的環境給予一些限制,這些細部資料都可以去
官網查詢。如在此我使用Java來實作,某些原本JDK提供的API就無法使用了,因此在這邊我
雖然整合了ReCaptcha來做驗證碼輸入,不過是侷限在剛好這個plugin是google推的,一開始是
打算使用SimpleCaptcha,不過剛好java.awt.image.BufferedImage不支援,因此就選擇此囉!
1. 首先可以自https://code.google.com/p/recaptcha/downloads/list?q=label:java-Latest下載Library
2. 下載好請放至war\WEB-INF\lib內,並且加至Eclipse - Java Build Path內
3. 至於前端的code
<%@ page import="net.tanesha.recaptcha.ReCaptcha" %>
<%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %>
.....
<form>
<%
.......
ReCaptcha c = ReCaptchaFactory.newReCaptcha(
LifeToolUtil.ReCaptcha_public_key,
LifeToolUtil.ReCaptcha_private_key, false);
out.print(c.createRecaptchaHtml(null, null));
%>
</form>
LifeToolUtil.ReCaptcha_public_key, LifeToolUtil.ReCaptcha_private_key為我所定義的
class LifeToolUtil內的field,而此key您可以自此頁面取得,如下圖
在前端此時您可以得到如下畫面
4. 改變 ReCaptcha的樣式其實很容易,請在JavaScript code內加入此段
var RecaptchaOptions = {
theme : 'clean'
};
5. 再來就是當送出表單時,後端code的處理,如下:
String remoteAddr = req.getRemoteAddr();
String challenge = req.getParameter("recaptcha_challenge_field");
String uresponse = req.getParameter("recaptcha_response_field");
try {
if(LifeToolUtil.check_ReCaptcha_answer(remoteAddr, challenge, uresponse)){
memberservice.addMember(member);
resp.sendRedirect("index.html");
}else{
throw new RuntimeException("驗證碼輸入錯誤!", new Throwable("answer_error"));
}
}catch (Throwable e) {
req.setAttribute(e.getCause().getMessage(), e.getMessage());
//out.println(e.getMessage());
req.getRequestDispatcher("/register.jsp").forward(req, resp);
}
先取得這三個值(remoteAddr, challenge, uresponse),如此方可以利用ReCaptcha的method來驗
證是否正確!一樣地利用自定義的LifeToolUtil class的method check_ReCaptcha_answer來幫我
檢驗,method code如下:
public static boolean check_ReCaptcha_answer(String remoteAddr,
String challenge, String uresponse){
ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
reCaptcha.setPrivateKey(ReCaptcha_private_key);
ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remoteAddr, challenge, uresponse);
return reCaptchaResponse.isValid();
}
在此只是將官方提供的code把他包成我想使用的方式,並沒有做多大的變化!
參考網址如下:https://developers.google.com/recaptcha/docs/java
注意!! 最後Deploy to App Engine時,記得要申請過新的Key(由於Domain不一樣)
留言
張貼留言