Como usar o reCAPTCHA com Java/JSP

Importante: a versão 1.0 da API reCAPTCHA não é mais compatível. Faça upgrade para a versão 2.0. Saiba mais

A biblioteca reCAPTCHA Java oferece uma maneira simples de inserir um CAPTCHA. no seu site baseado em Java, o que ajuda você a impedir que os bots abusem dele. A biblioteca encapsula os API reCAPTCHA.

Para usar o reCAPTCHA com Java/JSP, faça o download do arquivo reCAPTCHA Java Biblioteca aqui (contribuída por Soren) e descompacte-a. Normalmente, você só precisa de o arquivo jar (recaptcha4j-X.X.X.jar), que você precisa copiar para um local em que possa ser carregado. pelo seu aplicativo Java. Por exemplo, se você estiver usando o Tomcat para executar a JZ, poderá colocar o arquivo jar em um diretório chamado WEB-INF/lib/.

Início rápido

Depois de se inscrever para as chaves de API e fazer o download da biblioteca reCAPTCHA Java, veja abaixo as instruções básicas para e instalar o reCAPTCHA no seu site.

Lado do cliente (como fazer a imagem CAPTCHA aparecer)

Se quiser usar o plug-in Java para exibir o widget reCAPTCHA, você precisará importar as classes reCAPTCHA adequadas. Na JAP, você faria isso inserindo essas linhas próximas ao parte superior do arquivo com o elemento de formulário em que o widget reCAPTCHA será exibido:

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

Em seguida, você precisa criar uma instância do reCAPTCHA:

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

Por fim, o HTML para exibir o widget reCAPTCHA pode ser obtido do seguinte chamada de função:

    c.createRecaptchaHtml(null, null)

Dessa forma, seu código na página da JPL pode ter a seguinte aparência:

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

Não se esqueça de substituir your_public_key e your_private_key por os valores da chave de API.

No servidor (como testar se o usuário inseriu a resposta certa)

No aplicativo que verifica seu formulário, primeiro é necessário importar as Classes reCAPTCHA:

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

Em seguida, você precisa inserir o código que verifica a solução reCAPTCHA inserida pelo usuário. O exemplo abaixo (em JAP) mostra como isso pode ser feito:

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

No código acima:

  • remoteAddr é o endereço IP do usuário, que é transmitido ao reCAPTCHA. servidores)
  • uresponse contém a resposta do usuário para o desafio reCAPTCHA.
  • Importante: armazenamento em cache de DNS

    O Java tem um problema chato que pode causar a conexão entre seu servidor e o reCAPTCHA seja interrompido em intervalos de alguns meses, e o reCAPTCHA deixará de funcionar em seu site quando esse acontece. Leia abaixo para saber como corrigir isso.

    Por padrão, a máquina virtual Java (JVM) armazena em cache todas as pesquisas DNS para sempre, em vez de usar o valor de time to live (TTL) que é especificado no registro DNS de cada host. Para os como não saber, uma busca DNS é uma solicitação enviada a um servidor DNS que converte uma legível do seu nome de host em um endereço IP. Por exemplo, ele converte www.recaptcha.net no Endereço IP 69.12.97.164. Obviamente, ele é muito mais complexo do que isso, e se você quiser para saber mais, entrada da Wikipédia sobre DNS é um bom ponto de partida.

    Embora não seja frequente, os servidores reCAPTCHA podem alterar endereços IP. Como o Java armazena o DNS em cache, pesquisas para sempre, isso pode fazer com que a conexão entre seu servidor e o reCAPTCHA caia quando o endereço IP do reCAPTCHA muda. Se isso acontecer, reinicie a JVM (por exemplo, reiniciar Tomcat) pode corrigir o problema porque ele causa uma nova busca DNS. No entanto, você provavelmente não quiser reiniciar sua JVM uma vez em intervalos de alguns meses sempre que seu site falhar porque o reCAPTCHA de rede mudaram o endereço IP.

    Para corrigir esse problema definitivamente, você pode passar -Dsun.net.inetaddr.ttl=30 para app-server (informa ao Java para armazenar o DNS em cache apenas por 30 segundos). No Tomcat para Windows, ser feito por

    1. Parar Tomcat
    2. Ir para tomcat\bin
    3. Execute Tomcat5w.exe
    4. Acessar a guia Java
    5. Adicionar a propriedade Java à seção de opções Java: -Dsun.net.inetaddr.ttl=30
    6. Sair
    7. Iniciar o Tomcat

    No Tomcat para Linux ou MacOS X, você precisa executar o seguinte comando na linha de comando (e reinicie o Tomcat):

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

    Confira este artigo explicando mais sobre o problema.

    Leitura adicional

  • Personalizar a aparência
  • Dicas e diretrizes
  • Solução de problemas