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
- Parar Tomcat
- Ir para tomcat\bin
- Execute Tomcat5w.exe
- Acessar a guia Java
- Adicionar a propriedade Java à seção de opções Java: -Dsun.net.inetaddr.ttl=30
- Sair
- 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.