استفاده از reCAPTCHA با جاوا/JSP

مهم : نسخه 1.0 reCAPTCHA API دیگر پشتیبانی نمی‌شود، لطفاً به نسخه 2.0 ارتقا دهید. بیشتر بدانید

کتابخانه جاوا reCAPTCHA یک راه ساده برای قرار دادن یک CAPTCHA در وب سایت مبتنی بر جاوا ارائه می دهد و به شما کمک می کند ربات ها از سوء استفاده از آن جلوگیری کنید. کتابخانه reCAPTCHA API را بسته بندی می کند.

برای استفاده از reCAPTCHA با جاوا/JSP، می‌توانید کتابخانه جاوا reCAPTCHA را از اینجا دانلود کرده و آن را از حالت فشرده خارج کنید. به طور معمول تنها چیزی که به آن نیاز دارید فایل jar (recaptcha4j-XXXjar) است که باید آن را در مکانی کپی کنید که بتوان آن را توسط برنامه جاوا بارگیری کرد. به عنوان مثال، اگر از Tomcat برای اجرای JSP استفاده می کنید، می توانید فایل jar را در پوشه ای به نام WEB-INF/lib/ قرار دهید.

شروع سریع

بعد از اینکه برای کلیدهای API خود ثبت نام کردید و کتابخانه جاوا reCAPTCHA را دانلود کردید، در زیر دستورالعمل های اولیه برای نصب reCAPTCHA در سایت شما آورده شده است.

سمت مشتری (نحوه نمایش تصویر CAPTCHA)

اگر می خواهید از افزونه جاوا برای نمایش ویجت 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

    جاوا یک مشکل آزاردهنده دارد که ممکن است باعث شود ارتباط بین سرور شما و reCAPTCHA هر چند ماه یکبار قطع شود و زمانی که این اتفاق بیفتد reCAPTCHA در سایت شما کار نخواهد کرد. برای مشاهده نحوه رفع این مشکل، زیر را بخوانید.

    به‌طور پیش‌فرض، ماشین مجازی جاوا (JVM) به جای استفاده از مقدار time-to-live (TTL) که در رکورد DNS هر میزبان مشخص شده است، همه جستجوهای DNS را برای همیشه در حافظه پنهان می‌کند. برای کسانی از شما که چگونه آن را نمی دانید، جستجوی DNS درخواستی است که به یک سرور DNS ارسال می شود که نام میزبان قابل خواندن را به آدرس IP تبدیل می کند. به عنوان مثال، www.recaptcha.net را به آدرس IP 69.12.97.164 تبدیل می کند. البته بسیار پیچیده‌تر از این است، و اگر می‌خواهید بیشتر بدانید، ورود ویکی‌پدیا به DNS نقطه شروع خوبی است.

    اگرچه اغلب اوقات، سرورهای reCAPTCHA می توانند آدرس های IP را تغییر دهند. از آنجا که جاوا جستجوهای DNS را برای همیشه ذخیره می کند، این امر می تواند باعث شود که ارتباط بین سرور شما و reCAPTCHA با تغییر آدرس IP reCAPTCHA از بین برود. اگر این اتفاق بیفتد، راه اندازی مجدد JVM (به عنوان مثال، راه اندازی مجدد Tomcat) می تواند مشکل را برطرف کند زیرا باعث جستجوی DNS جدید می شود. با این حال، احتمالاً نمی خواهید JVM خود را هر چند ماه یکبار هر زمان که سایت شما خراب می شود، راه اندازی مجدد کنید زیرا سرورهای reCAPTCHA آدرس IP را تغییر داده اند.

    برای رفع این مشکل، می‌توانید -Dsun.net.inetaddr.ttl=30 را به سرور برنامه خود ارسال کنید (این به جاوا می‌گوید که DNS را فقط به مدت 30 ثانیه کش کند). در Tomcat برای ویندوز، این کار را می توان توسط

    1. تامکت را متوقف کنید
    2. به tomcat\bin بروید
    3. Tomcat5w.exe را اجرا کنید
    4. به تب جاوا بروید
    5. افزودن ویژگی جاوا به بخش گزینه های جاوا: -Dsun.net.inetaddr.ttl=30
    6. خارج شوید
    7. تامکت را شروع کنید

    در تامکت برای لینوکس یا MacOS X، باید دستور زیر را در خط فرمان اجرا کنید (و سپس Tomcat را مجددا راه اندازی کنید):

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

    در اینجا مقاله ای است که در مورد این موضوع بیشتر توضیح می دهد.

    ادامه مطلب

  • سفارشی کردن ظاهر و احساس
  • نکات و رهنمودها
  • عیب یابی