Importante: não há mais suporte para a versão 1.0 da API reCAPTCHA. Faça upgrade para a versão 2.0. Saiba mais
A biblioteca reCAPTCHA Java oferece uma maneira simples de colocar um CAPTCHA em seu site baseado em Java, o que ajuda a impedir que bots abusem dele. A biblioteca encapsula a API reCAPTCHA.
Para usar o reCAPTCHA com Java/JSP, faça o download da biblioteca Java reCAPTCHA aqui (contribuído por Soren) e descompacte-a. Normalmente, você só precisa do arquivo jar (recaptcha4j-X.X.X.jar), que precisa ser copiado para um local onde ele possa ser carregado pelo aplicativo Java. Por exemplo, se você estiver usando o Tomcat para executar o Java, basta colocar o arquivo jar em um diretório chamado WEB-INF/lib/.
Início rápido
Depois de se inscrever para usar suas chaves de API e fazer o download da biblioteca Java do reCAPTCHA, confira abaixo as instruções básicas para instalar o reCAPTCHA no seu site.
Lado do cliente (como fazer a imagem do CAPTCHA aparecer)
Se você quiser usar o plug-in do Java para exibir o widget reCAPTCHA, será necessário importar as classes reCAPTCHA apropriadas. Na Java, isso é feito inserindo estas linhas próximas à 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, crie 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 recebido desta chamada de função:
c.createRecaptchaHtml(null, null)
Assim, na Java, seu código pode ser parecido com este exemplo:
<%@ 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
pelos valores da chave de API.
Lado do 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 necessárias:
import net.tanesha.recaptcha.ReCaptchaImpl; import net.tanesha.recaptcha.ReCaptchaResponse;
Em seguida, insira o código que verifica a solução reCAPTCHA inserida pelo usuário. O exemplo abaixo (em Java) 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, transmitido para os servidores reCAPTCHA.uresponse
contém a resposta do usuário para o desafio reCAPTCHA.Importante: armazenamento em cache de DNS
O Java tem um problema irritante que pode fazer com que a conexão entre seu servidor e o reCAPTCHA seja interrompida em intervalos de alguns meses, e o reCAPTCHA vai parar de funcionar no seu site quando isso acontecer. Leia abaixo para saber como corrigir isso.
Por padrão, a Java Virtual Machine (JVM) armazena em cache todas as pesquisas DNS para sempre, em vez de usar o valor de time to live (TTL) especificado no registro DNS de cada host. Para quem não sabe, uma busca DNS é uma solicitação enviada a um servidor DNS que converte um nome do host legível em um endereço IP. Por exemplo, ele converte www.recaptcha.net no endereço IP 69.12.97.164. Obviamente isso é muito mais complexo do que isso, e se você quiser saber mais, a entrada da Wikipédia sobre DNS é um bom ponto de partida.
Embora isso não seja frequente, os servidores reCAPTCHA podem mudar endereços IP. Como o Java armazena as pesquisas DNS em cache para sempre, isso pode fazer com que a conexão entre seu servidor e o reCAPTCHA seja desativada quando o endereço IP do reCAPTCHA mudar. Se isso acontecer, reiniciar a JVM (por exemplo, reiniciar o Tomcat) pode corrigir o problema, porque causa uma nova busca DNS. No entanto, você provavelmente não quer reiniciar a JVM uma vez em intervalos de alguns meses sempre que o site falhar porque os servidores reCAPTCHA mudaram o endereço IP.
Para corrigir esse problema definitivamente, você pode transmitir -Dsun.net.inetaddr.ttl=30 ao app-server. Isso informa ao Java para armazenar em cache apenas o DNS por 30 segundos. No Tomcat para Windows, isso pode ser feito
- Parar o Tomcat
- Ir para tomcat\bin
- Executar o Tomcat5w.exe
- Acessar a guia Java
- Adicionar propriedade Java à seção de opções Java: -Dsun.net.inetaddr.ttl=30
- Sair
- Inicie o Tomcat
No Tomcat para Linux ou MacOS X, execute o seguinte comando na linha de comando e reinicie o Tomcat:
export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=30"
Confira este artigo que explica esse problema.