שימוש ב-reCAPTCHA עם Java/JSP

חשוב: גרסה 1.0 של reCAPTCHA API לא נתמכת יותר, צריך לשדרג לגרסה 2.0. מידע נוסף

ספריית reCAPTCHA Java מספקת דרך פשוטה להציב CAPTCHA באתר שמבוסס על Java, ועוזרת למנוע ניצול לרעה של בוטים. הספרייה כוללת את reCAPTCHA API.

כדי להשתמש ב-reCAPTCHA עם Java/JSP, אפשר להוריד את ספריית ה-Java reCAPTCHA כאן (בתרומת Soren) ולפרוס אותה. בדרך כלל, הקובץ היחיד שנחוץ לכם הוא קובץ הצנצנת (recaptcha4j-X.X.X.jar), שצריך להעתיק אותו למקום שבו אפשר לטעון אותו באמצעות אפליקציית Java. לדוגמה, אם אתם משתמשים ב-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 יפסיק לפעול באתר שלכם במקרה כזה. בהמשך מוסבר איך לפתור את הבעיה.

    כברירת מחדל, כל החיפושים של ה-DNS נשמרים במטמון של Java Virtual Machine (JVM) במקום להשתמש בערך זמן החיים (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, ניתן לעשות זאת על ידי

    1. הפסקת Tomcat
    2. מעבר אל tomcat\bin
    3. מריצים את Tomcat5w.exe
    4. מעבר לכרטיסייה של Java
    5. הוסף מאפיין java לקטע אפשרויות java: -Dsun.net.inetaddr.ttl=30
    6. יציאה
    7. הפעלת Tomcat

    ב-Tomcat ל-Linux או ל-MacOS X, מריצים את הפקודה הבאה בשורת הפקודה (ולאחר מכן מפעילים מחדש את Tomcat):

        export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=30"
    

    כאן יש מאמר שכולל הסבר נוסף על הבעיה.

    קריאה נוספת

  • התאמה אישית של המראה והתחושה
  • טיפים והנחיות
  • פתרון בעיות