reCAPTCHA mit Java/JSP verwenden

Wichtig: Version 1.0 der reCAPTCHA API wird nicht mehr unterstützt. Führen Sie ein Upgrade auf Version 2.0 aus. Weitere Informationen

Die reCAPTCHA-Java-Bibliothek bietet eine einfache Möglichkeit, ein CAPTCHA auf Ihrer Java-basierten Website zu platzieren und so zu verhindern, dass Bots missbraucht werden. Die Bibliothek umschließt die reCAPTCHA API.

Wenn Sie reCAPTCHA mit Java/JSP verwenden möchten, können Sie die reCAPTCHA-Java-Bibliothek hier herunterladen (von Sören bereitgestellt) und entpacken. In der Regel benötigen Sie nur die JAR-Datei (recaptcha4j-X.X.X.jar), die Sie an einen Ort kopieren müssen, an dem sie von Ihrer Java-Anwendung geladen werden kann. Wenn Sie beispielsweise Tomcat zur Ausführung von JSP verwenden, können Sie die JAR-Datei in einem Verzeichnis namens WEB-INF/lib/ ablegen.

Schnellstart

Nachdem Sie sich für Ihre API-Schlüssel registriert und die reCAPTCHA-Java-Bibliothek heruntergeladen haben, folgen Sie der grundlegenden Anleitung zur Installation von reCAPTCHA auf Ihrer Website.

Clientseitig (So wird das CAPTCHA-Bild angezeigt)

Wenn Sie das Java-Plug-in zum Anzeigen des reCAPTCHA-Widgets verwenden möchten, müssen Sie die entsprechenden reCAPTCHA-Klassen importieren. In JSP-Datei würden Sie dies tun, indem Sie diese Zeilen mit dem Formularelement am Anfang der Datei einfügen, in dem das reCAPTCHA-Widget angezeigt wird:

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

Anschließend müssen Sie eine reCAPTCHA-Instanz erstellen:

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

Schließlich kann der HTML-Code zur Anzeige des reCAPTCHA-Widgets über den folgenden Funktionsaufruf abgerufen werden:

    c.createRecaptchaHtml(null, null)

In JSP könnte Ihr Code in etwa wie folgt aussehen:

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

Vergessen Sie nicht, your_public_key und your_private_key durch Ihre API-Schlüssel/Wert-Paare zu ersetzen.

Serverseitig (So testen Sie, ob der Nutzer die richtige Antwort eingegeben hat)

Importieren Sie in der Anwendung, die Ihr Formular bestätigt, zuerst die erforderlichen reCAPTCHA-Klassen:

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

Als Nächstes müssen Sie den Code einfügen, der die vom Nutzer eingegebene reCAPTCHA-Lösung verifiziert. Das folgende Beispiel (in JSP) zeigt, wie dies funktioniert:

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

Im obigen Code gilt Folgendes:

  • remoteAddr ist die IP-Adresse des Nutzers, die an die reCAPTCHA-Server übergeben wird.
  • uresponse enthält die Antwort des Nutzers auf die reCAPTCHA-Aufgabe.
  • Wichtig: DNS-Caching

    Bei Java gibt es ein lästiges Problem, das dazu führen kann, dass die Verbindung zwischen Ihrem Server und reCAPTCHA alle paar Monate unterbrochen wird und reCAPTCHA auf Ihrer Website in diesem Fall nicht mehr funktioniert. Unten erfährst du, wie du dieses Problem beheben kannst.

    Standardmäßig speichert die Java Virtual Machine (JVM) alle DNS-Lookups dauerhaft im Cache, anstatt den Wert der Gültigkeitsdauer (TTL) zu verwenden, der im DNS-Eintrag jedes Hosts angegeben ist. Wenn Sie es nicht kennen, ist ein DNS-Lookup eine Anfrage, die an einen DNS-Server gesendet wird, der einen lesbaren Hostnamen in eine IP-Adresse umwandelt. Beispielsweise wird www.recaptcha.net in die IP-Adresse 69.12.97.164 umgewandelt. Es ist natürlich wesentlich komplexer als diese hier. Wenn Sie mehr erfahren möchten, ist der Eintrag von Wikipedia zu DNS ein guter Ausgangspunkt.

    reCAPTCHA-Server können IP-Adressen ändern, auch wenn dies nicht häufig der Fall ist. Da Java DNS-Lookups dauerhaft im Cache speichert, kann dies dazu führen, dass die Verbindung zwischen Ihrem Server und reCAPTCHA unterbrochen wird, wenn sich die reCAPTCHA-IP-Adresse ändert. In diesem Fall können Sie das Problem durch einen Neustart der JVM beheben (z.B. durch einen Neustart von Tomcat), da dadurch ein neuer DNS-Lookup ausgelöst wird. Allerdings sollten Sie Ihre JVM nicht alle paar Monate neu starten, wenn Ihre Website nicht mehr funktioniert, da die reCAPTCHA-Server die IP-Adresse geändert haben.

    Um dieses Problem dauerhaft zu beheben, können Sie -Dsun.net.inetaddr.ttl=30 an Ihren Anwendungsserver übergeben. Dadurch wird Java angewiesen, das DNS nur 30 Sekunden lang im Cache zu speichern. In Tomcat für Windows können Sie dies tun, indem Sie

    1. Tomcat stoppen
    2. Zu Tomcat\bin wechseln
    3. Führen Sie Tomcat5w.exe aus.
    4. Zum Tab „Java“
    5. Java-Eigenschaft im Abschnitt zu Java-Optionen hinzufügen: -Dsun.net.inetaddr.ttl=30
    6. Beenden
    7. Tomcat starten

    In Tomcat für Linux oder MacOS X müssen Sie den folgenden Befehl in der Befehlszeile ausführen (und dann Tomcat neu starten):

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

    Weitere Informationen zu diesem Problem finden Sie in diesem Artikel.

    Weiterführende Literatur

  • Erscheinungsbild anpassen
  • Tipps und Richtlinien
  • Fehlerbehebung