Menggunakan reCAPTCHA dengan Java/JSP

Penting: reCAPTCHA API versi 1.0 tidak lagi didukung. Harap upgrade ke Versi 2.0. Pelajari lebih lanjut

Library reCAPTCHA Java menyediakan cara sederhana untuk menempatkan CAPTCHA di situs web berbasis Java, membantu Anda menghentikan {i>bot <i}agar tidak menyalahgunakannya. Library ini menggabungkan reCAPTCHA API.

Untuk menggunakan reCAPTCHA dengan Java/JSP, Anda dapat mendownload reCAPTCHA Java Koleksi di sini (disumbangkan oleh Soren) dan ekstrak. Biasanya, satu-satunya hal yang Anda perlukan adalah file {i>jar<i} (recaptcha4j-X.X.X.jar), yang harus Anda salin ke tempat yang dapat memuatnya oleh aplikasi java Anda. Misalnya, jika Anda menggunakan Tomcat untuk menjalankan JSP, Anda dapat memasukkan stoples file di direktori yang bernama WEB-INF/lib/.

Mulai Cepat

Setelah mendaftar kunci API dan mendownload Library reCAPTCHA Java, di bawah ini adalah petunjuk dasar untuk menginstal reCAPTCHA di situs Anda.

Sisi Klien (Cara memunculkan gambar CAPTCHA)

Jika Anda ingin menggunakan plugin Java untuk menampilkan widget reCAPTCHA, Anda harus mengimpor class reCAPTCHA yang sesuai. Di JSP, Anda akan melakukannya dengan memasukkan baris-baris ini di dekat bagian bagian atas file dengan elemen formulir tempat widget reCAPTCHA akan ditampilkan:

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

Kemudian, Anda perlu membuat instance reCAPTCHA:

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

Terakhir, HTML untuk menampilkan widget reCAPTCHA dapat diperoleh dari pemanggilan fungsi:

    c.createRecaptchaHtml(null, null)

Jadi, dalam JSP, kode Anda mungkin terlihat seperti ini:

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

Jangan lupa untuk mengganti your_public_key dan your_private_key dengan nilai kunci API Anda.

Sisi Server (Cara menguji apakah pengguna memasukkan jawaban yang benar)

Dalam permohonan yang memverifikasi formulir, Anda harus mengimpor data yang diperlukan Class reCAPTCHA:

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

Selanjutnya, Anda harus memasukkan kode yang memverifikasi solusi reCAPTCHA yang dimasukkan oleh pengguna. Contoh di bawah (di JSP) menunjukkan bagaimana hal ini dapat dilakukan:

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

Dalam kode di atas:

  • remoteAddr adalah alamat IP pengguna (yang diteruskan ke reCAPTCHA server)
  • uresponse berisi jawaban pengguna terhadap tantangan reCAPTCHA.
  • Penting: Cache DNS

    Java memiliki masalah mengganggu yang dapat menyebabkan koneksi antara server Anda dan reCAPTCHA terganggu setiap beberapa bulan, dan reCAPTCHA akan berhenti berfungsi di situs Anda jika terjadi. Baca penjelasan di bawah untuk mengetahui cara memperbaikinya.

    Secara default, Java Virtual Machine (JVM) menyimpan cache semua pencarian DNS selamanya, bukan nilai time-to-live (TTL) yang ditentukan dalam data DNS setiap host. Bagi yang sudah Anda bagaimana tidak mengetahuinya, pencarian DNS adalah permintaan yang dikirim ke server DNS yang mengubah nama {i>host<i} yang dapat dibaca menjadi alamat IP. Misalnya, ia mengonversi www.recaptcha.net menjadi Alamat IP 69.12.97.164. Ini tentu jauh lebih kompleks daripada ini, dan jika Anda ingin untuk mempelajari lebih lanjut, entri wikipedia tentang DNS adalah titik awal yang baik.

    Meskipun jarang, server reCAPTCHA dapat mengubah alamat IP. Karena Java menyimpan DNS dalam cache pencarian selamanya, hal ini dapat menyebabkan terputusnya koneksi antara server Anda dan reCAPTCHA saat alamat IP reCAPTCHA berubah. Jika ini terjadi, mulai ulang JVM Anda (misalnya, memulai ulang Tomcat) dapat memperbaiki masalah karena menyebabkan pencarian DNS baru. Namun, Anda mungkin tidak ingin memulai ulang JVM Anda setiap beberapa bulan sekali setiap kali situs Anda rusak karena reCAPTCHA server mengubah alamat IP.

    Untuk memperbaiki masalah ini selamanya, Anda dapat meneruskan -Dsun.net.inetaddr.ttl=30 ke server-aplikasi (ini memberi tahu Java untuk hanya meng-cache DNS selama 30 detik). Di Tomcat for Windows, ini bisa dilakukan oleh

    1. Hentikan Tomcat
    2. Buka tomcat\bin
    3. Menjalankan Tomcat5w.exe
    4. Buka tab java
    5. Menambahkan properti java ke bagian opsi java: -Dsun.net.inetaddr.ttl=30
    6. Keluar
    7. Mulai Tomcat

    Di Tomcat untuk Linux atau MacOS X, Anda perlu menjalankan perintah berikut di command line (lalu mulai ulang Tomcat):

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

    Berikut ini artikel yang menjelaskan masalah ini lebih lanjut.

    Bacaan Lebih Lanjut

  • Menyesuaikan Tampilan dan Nuansa
  • Tips dan Pedoman
  • Pemecahan masalah