Java/JSP ile reCAPTCHA'yı kullanma

Önemli: reCAPTCHA API'nin 1.0 sürümü artık desteklenmiyor, lütfen 2.0 sürümüne yükseltin. Daha fazla bilgi

reCAPTCHA Java Kitaplığı, Java tabanlı web sitenize bir CAPTCHA yerleştirmek için basit bir yol sağlayarak botların bunu kötüye kullanmasını önlemenize yardımcı olur. Kitaplık, reCAPTCHA API'yi sarmalar.

reCAPTCHA'yı Java/JSP ile kullanmak için Soren'in katkıda bulunduğu reCAPTCHA Java Kitaplığı'nı indirip sıkıştırmasını açabilirsiniz. Genellikle tek ihtiyacınız olan jar dosyasıdır (recaptcha4j-X.X.X.jar). Bu dosyayı, Java uygulamanız tarafından yüklenebileceği bir yere kopyalamanız gerekir. Örneğin, JSP'yi çalıştırmak için Tomcat'i kullanıyorsanız jar dosyasını WEB-INF/lib/ adlı bir dizine yerleştirebilirsiniz.

Hızlı Başlangıç Kılavuzu

API anahtarlarınız için kaydolup reCAPTCHA Java Kitaplığı'nı indirdikten sonra, reCAPTCHA'yı sitenize yüklemek için gerekli temel talimatları aşağıda bulabilirsiniz.

İstemci Tarafı (CAPTCHA resminin görünmesini sağlama)

reCAPTCHA widget'ını görüntülemek için Java eklentisini kullanmak istiyorsanız uygun reCAPTCHA sınıflarını içe aktarmanız gerekir. JSP'de bunu, reCAPTCHA widget'ının görüntüleneceği form öğesini içeren dosyanın üst kısmına yakın bir yere ekleyerek yapabilirsiniz:

    <%@ page import="net.tanesha.recaptcha.ReCaptcha" %>
    <%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %>

Ardından, bir reCAPTCHA örneği oluşturmanız gerekir:

    ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false);

Son olarak, reCAPTCHA widget'ını gösterecek HTML, aşağıdaki işlev çağrısından elde edilebilir:

    c.createRecaptchaHtml(null, null)

Dolayısıyla, JSP'de kodunuz aşağıdaki gibi görünebilir:

    <%@ 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 ve your_private_key değerlerini API anahtar değerlerinizle değiştirmeyi unutmayın.

Sunucu Tarafı (Kullanıcının doğru yanıtı girip girmediğini test etme)

Formunuzu doğrulayan başvuruda öncelikle gerekli reCAPTCHA sınıflarını içe aktarmanız gerekir:

    import net.tanesha.recaptcha.ReCaptchaImpl;
    import net.tanesha.recaptcha.ReCaptchaResponse;

Ardından, kullanıcının girdiği reCAPTCHA çözümünü doğrulayan kodu eklemeniz gerekir. Aşağıdaki örnekte (JSP'de), bunun nasıl yapılacağı gösterilmektedir:

    <%@ 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>

Yukarıdaki kodda:

  • remoteAddr, kullanıcının IP adresidir (reCAPTCHA sunucularına iletilir)
  • uresponse, kullanıcının reCAPTCHA sorusuna verdiği yanıtı içerir.
  • Önemli: DNS Önbelleğe Alma

    Java'da, sunucunuz ile reCAPTCHA arasındaki bağlantının birkaç ayda bir kesintiye uğramasına neden olabilecek rahatsız edici bir sorun vardır ve bu durum yaşandığında reCAPTCHA sitenizde çalışmayı durdurur. Bu sorunu nasıl düzelteceğinizi öğrenmek için aşağıdaki bölümü okuyun.

    Varsayılan olarak Java Sanal Makinesi (JVM), her bir ana makinenin DNS kaydında belirtilen geçerlilik süresi (TTL) değerini kullanmak yerine tüm DNS aramalarını önbelleğe alır. Bilmeyenleriniz için DNS araması, DNS sunucusuna gönderilen ve okunabilir bir ana makine adını IP adresine dönüştüren bir istektir. Örneğin, www.recaptcha.net kodunu 69.12.97.164 IP adresine dönüştürür. Elbette, bundan çok daha karmaşıktır ve daha fazla bilgi edinmek isterseniz Wikipedia'nın DNS girişi iyi bir başlangıç noktasıdır.

    Sık sık olmasa da reCAPTCHA sunucuları IP adreslerini değiştirebilir. Java, DNS aramalarını sonsuza kadar önbelleğe aldığından, reCAPTCHA IP adresi değiştiğinde sunucunuz ile reCAPTCHA arasındaki bağlantı kesilebilir. Bu durumda, JVM'nizi yeniden başlatmak (ör. Tomcat'i yeniden başlatmak), yeni bir DNS aramasına neden olduğundan sorunu çözebilir. Bununla birlikte, reCAPTCHA sunucuları IP adresini değiştirdiği için muhtemelen siteniz bozulduğunda JVM'nizi birkaç ayda bir yeniden başlatmak istemezsiniz.

    Bu sorunu tamamen düzeltmek için uygulama sunucunuza -Dsun.net.inetaddr.ttl=30 kodunu iletebilirsiniz (bu, Java'ya DNS'yi yalnızca 30 saniye süreyle önbelleğe almasını söyler). Windows için Tomcat'te, bu işlemi farklı

    1. Tomcat'i durdur
    2. tomcat\bin adresine git
    3. Tomcat5w.exe'yi çalıştırın
    4. Java sekmesine git
    5. Java seçenekleri bölümüne java özelliği ekleyin: -Dsun.net.inetaddr.ttl=30
    6. Çık
    7. Tomcat'i başlat

    Linux veya MacOS X için Tomcat'te, komut satırında aşağıdaki komutu çalıştırmanız (ve ardından Tomcat'i yeniden başlatmanız) gerekir:

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

    Bu sorunla ilgili daha fazla bilgi veren makaleyi burada bulabilirsiniz.

    Ek Okumalar

  • Görünüm ve Tarzı Özelleştirme
  • İpuçları ve Kurallar
  • Sorun giderme