Utilizzo di reCAPTCHA con Java/JSP

Importante: la versione 1.0 dell'API reCAPTCHA non è più supportata. Esegui l'upgrade alla versione 2.0. Scopri di più

La libreria Java di reCAPTCHA offre un modo semplice per inserire un CAPTCHA sul tuo sito web basato su Java, aiutandoti a impedire ai bot di utilizzarlo in modo illecito. La libreria aggrega API reCAPTCHA.

Per utilizzare reCAPTCHA con Java/JSP, puoi scaricare il reCAPTCHA Java Raccogli qui (di Soren) e decomprimilo. Di solito l'unica cosa che ti serve il file jar (recaptcha4j-X.X.X.jar), che devi copiare in un posto dove può essere caricato dalla tua applicazione Java. Ad esempio, se utilizzi Tomcat per eseguire JSP, puoi inserire il jar in una directory chiamata WEB-INF/lib/.

Avvio rapido

Dopo aver effettuato la registrazione per le chiavi API e scaricato la libreria Java reCAPTCHA, segui le istruzioni di base per installare reCAPTCHA sul tuo sito.

Lato client (come visualizzare l'immagine CAPTCHA)

Se vuoi utilizzare il plug-in Java per visualizzare il widget reCAPTCHA, dovrai importare le classi reCAPTCHA appropriate. In JSP, puoi inserire queste righe vicino al parte superiore del file con l'elemento del modulo in cui verrà visualizzato il widget reCAPTCHA:

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

Quindi, devi creare un'istanza di reCAPTCHA:

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

Infine, il codice HTML per visualizzare il widget reCAPTCHA può essere ottenuto dal seguente funzione chiamata:

    c.createRecaptchaHtml(null, null)

Quindi, in JSP il codice potrebbe essere simile al seguente:

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

Non dimenticare di sostituire your_public_key e your_private_key con le coppie chiave-valore dell'API.

Lato server (come verificare se l'utente ha inserito la risposta giusta)

Nell'applicazione che verifica il modulo, dovrai prima importare i necessari Classi reCAPTCHA:

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

Successivamente, devi inserire il codice per verificare la soluzione reCAPTCHA inserita dall'utente. L'esempio seguente (in JSP) mostra come eseguire questa operazione:

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

Nel codice riportato sopra:

  • remoteAddr è l'indirizzo IP dell'utente (che viene passato al reCAPTCHA) server)
  • uresponse contiene la risposta dell'utente alla verifica reCAPTCHA.
  • Importante: memorizzazione nella cache del DNS

    Java presenta un fastidioso problema che potrebbe causare la connessione tra il server e reCAPTCHA essere interrotto a intervalli di qualche mese e reCAPTCHA smetterà di funzionare sul tuo sito quando . Continua a leggere per sapere come risolvere il problema.

    Per impostazione predefinita, Java Virtual Machine (JVM) memorizza nella cache tutte le ricerche DNS per sempre anziché utilizzare il valore della durata (TTL) specificato nel record DNS di ciascun host. Per quelli di come non saperlo, una ricerca DNS è una richiesta inviata a un server DNS che converte leggibile a un indirizzo IP. Ad esempio, converte www.recaptcha.net nella Indirizzo IP 69.12.97.164. Ovviamente è molto più complesso di così e se vuoi per saperne di più, la voce di Wikipedia relativa DNS è un buon punto di partenza.

    Anche se non di frequente, i server reCAPTCHA possono cambiare gli indirizzi IP. Poiché Java memorizza nella cache il DNS di ricerche permanenti, questa operazione può causare l'interruzione della connessione tra il tuo server e reCAPTCHA quando cambia l'indirizzo IP di reCAPTCHA. In questo caso, riavvia la JVM (ad es. il riavvio Tomcat) può risolvere il problema perché causa una nuova ricerca DNS. Tuttavia, probabilmente non dovrai vuoi riavviare la JVM una volta ogni qualche mese ogni volta che il sito si arresta, perché i server hanno cambiato l'indirizzo IP.

    Per risolvere definitivamente questo problema, puoi passare -Dsun.net.inetaddr.ttl=30 al tuo app-server (questo indica a Java di memorizzare nella cache il DNS solo per 30 secondi). In Tomcat per Windows, è possibile da eseguire

    1. Interrompi Tomcat
    2. Vai a tomcat\bin
    3. Esegui Tomcat5w.exe
    4. Vai a scheda Java
    5. Aggiungi la proprietà Java alla sezione delle opzioni Java: -Dsun.net.inetaddr.ttl=30
    6. Esci
    7. Avvia Tomcat

    In Tomcat per Linux o MacOS X, devi eseguire il seguente comando nella riga di comando (e riavvia Tomcat):

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

    Ecco un articolo fornendo ulteriori informazioni su questo problema.

    Per approfondire

  • Personalizzazione di aspetto e design
  • Suggerimenti e linee guida
  • Risoluzione dei problemi