חשוב: אין יותר תמיכה בגרסה 1.0 של reCAPTCHA API. צריך לשדרג לגרסה 2.0. מידע נוסף
ספריית reCAPTCHA Java מספקת דרך פשוטה להציב CAPTCHA באתר מבוסס Java, ועוזר למנוע מבוטים לנצל אותו לרעה. הספרייה כוללת את reCAPTCHA API.
כדי להשתמש ב-reCAPTCHA עם Java/JSP, אפשר להוריד את reCAPTCHA Java כאן הספרייה (נתרמה על ידי Soren) ומחלצים את הקובץ. בדרך כלל הדבר היחיד שנחוץ לך הוא את קובץ ה-jar (recaptcha4j-X.X.X.jar), וצריך להעתיק אותו למקום שבו אפשר לטעון אותו על ידי אפליקציית ג'אווה. לדוגמה, אם אתם משתמשים ב-Tomcat כדי להריץ JSP, תוכלו לשים את הצנצנת שלך בספרייה בשם WEB-INF/lib/.
התחלה מהירה
אחרי שנרשמתם למפתחות ה-API והורדתם את ספריית reCAPTCHA Java, בהמשך מפורטות הוראות בסיסיות לגבי התקנת reCAPTCHA באתר.
בצד הלקוח (איך להציג תמונת CAPTCHA)
אם רוצים להשתמש בפלאגין של Java כדי להציג את הווידג'ט של reCAPTCHA, צריך לייבא את המחלקות המתאימות של reCAPTCHA. ב-JSP, אפשר לעשות זאת על ידי הוספת השורות האלה ליד בראש הקובץ עם רכיב הטופס שבו יוצג הווידג'ט של reCAPTCHA:
<%@ page import="net.tanesha.recaptcha.ReCaptcha" %> <%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %>
לאחר מכן, עליכם ליצור מופע של reCAPTCHA:
ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false);
לסיום, ניתן לקבל את קוד ה-HTML להצגת הווידג'ט של reCAPTCHA במקומות הבאים בקשה להפעלת פונקציה:
c.createRecaptchaHtml(null, null)
לכן, ב-JSP הקוד שלכם עשוי להיראות כך:
<%@ page import="net.tanesha.recaptcha.ReCaptcha" %> <%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %> <html> <body> <form action="" method="post"> <% ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false); out.print(c.createRecaptchaHtml(null, null)); %> <input type="submit" value="submit" /> </form> </body> </html>
לא לשכוח להחליף את your_public_key
ואת your_private_key
ב:
בערכי מפתח ה-API שלכם.
בצד השרת (איך בודקים אם המשתמש הזין את התשובה הנכונה)
באפליקציה שמאמתת את הטופס, תחילה עליך לייבא את מחלקות reCAPTCHA:
import net.tanesha.recaptcha.ReCaptchaImpl; import net.tanesha.recaptcha.ReCaptchaResponse;
בשלב הבא צריך להזין את הקוד שמאמת את פתרון ה-reCAPTCHA שהוזן על ידי המשתמש. הדוגמה הבאה (ב-JSP) ממחישה איך אפשר לעשות זאת:
<%@ page import="net.tanesha.recaptcha.ReCaptchaImpl" %> <%@ page import="net.tanesha.recaptcha.ReCaptchaResponse" %> <html> <body> <% String remoteAddr = request.getRemoteAddr(); ReCaptchaImpl reCaptcha = new ReCaptchaImpl(); reCaptcha.setPrivateKey("your_private_key");
String challenge = request.getParameter("recaptcha_challenge_field"); 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"); } %> </body> </html>
בקוד שלמעלה:
remoteAddr
היא כתובת ה-IP של המשתמש (שמועברת ל-reCAPTCHA
שרתים)uresponse
מכיל את התשובה של המשתמש לאתגר reCAPTCHA.חשוב: שמירת DNS במטמון
ב-Java יש בעיה מעצבנת שעלולה לגרום לחיבור בין השרת שלכם ל-reCAPTCHA תופסק מדי כמה חודשים, ו-reCAPTCHA יפסיק לפעול באתר שלך לאחר מכן קורה. בהמשך מוסבר איך לתקן את הבעיה.
כברירת מחדל, המכונה הווירטואלית של Java (JVM) שומרת במטמון את כל חיפושי ה-DNS לתמיד במקום להשתמש בהם ערך אורך החיים (TTL) שמצוין ברשומת ה-DNS של כל מארח. עבור איך אתם לא יודעים? חיפוש DNS הוא בקשה שנשלחת לשרת DNS שממיר שם מארח קריא לכתובת IP. לדוגמה, הוא ממיר את www.recaptcha.net כתובת IP 69.12.97.164. כמובן שזה הרבה יותר מורכב, ואם רוצים למידע נוסף, ערך ויקיפדיה ב- כדאי להתחיל עם DNS.
למרות שלא לעיתים קרובות, שרתי reCAPTCHA יכולים לשנות כתובות IP. כי Java שומרת DNS חיפושים לנצח. הדבר עלול לגרום לניתוק החיבור בין השרת ל-reCAPTCHA כשכתובת ה-IP של reCAPTCHA משתנה. במקרה כזה, צריך להפעיל מחדש את ה-JVM (למשל, הפעלה מחדש Tomcat) יכול לתקן את הבעיה כי היא גורמת לחיפוש DNS חדש. אבל סביר להניח שלא אם אתם רוצים להפעיל מחדש את ה-JVM שלכם פעם בכמה חודשים בכל פעם שהאתר שלכם נשבר בגלל שה-reCAPTCHA השרתים שינו את כתובת ה-IP.
כדי לפתור את הבעיה הזו לתמיד, אפשר להעביר את הכתובת -Dsun.net.inetaddr.ttl=30 אל שרת אפליקציות (הפעולה הזו מורה ל-Java לשמור DNS במטמון למשך 30 שניות בלבד). ב-Tomcat ל-Windows, אפשרות זו יכולה תתבצע על ידי
- הפסקת Tomcat
- מעבר אל tomcat\bin
- מריצים את Tomcat5w.exe
- מעבר לכרטיסיית Java
- הוספת מאפיין Java לקטע 'אפשרויות Java': -Dsun.net.inetaddr.ttl=30
- יציאה
- הפעלת Tomcat
ב-Tomcat ל-Linux או ל-MacOS X, צריך להריץ את הפקודה הבאה בשורת הפקודה (ולאחר מכן מפעילים מחדש את Tomcat):
export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=30"
כאן יש מאמר שמסבירה את הנושא הזה.