Importante: Ya no se admite la versión 1.0 de la API de reCAPTCHA. Actualiza a la versión 2.0. Más información
La biblioteca de Java de reCAPTCHA proporciona una forma sencilla de colocar un CAPTCHA. en tu sitio web basado en Java, lo que te ayudará a impedir que los bots lo abusen. La biblioteca incluye API de reCAPTCHA:
Para usar reCAPTCHA con Java/JSP, puedes descargar reCAPTCHA para Java Biblioteca aquí (contribución de Soren) y descomprímela. Por lo general, lo único que necesitas el archivo jar (recaptcha4j-X.X.X.jar), que debes copiar en un lugar donde se pueda cargar por tu aplicación de Java. Por ejemplo, si estás usando Tomcat para ejecutar JSP, puedes colocar el jar en un directorio llamado WEB-INF/lib/.
Inicio rápido
Después de registrarte para obtener tus claves de API y descargar la biblioteca de reCAPTCHA Java, sigue las instrucciones básicas para instalar reCAPTCHA en tu sitio.
Del cliente (cómo hacer que aparezca la imagen CAPTCHA)
Si quieres usar el complemento de Java para mostrar el widget de reCAPTCHA, deberás importar a las clases de reCAPTCHA adecuadas. En JSP, esto se puede hacer insertando estas líneas cerca de la en la parte superior del archivo con el elemento del formulario en el que se mostrará el widget de reCAPTCHA:
<%@ page import="net.tanesha.recaptcha.ReCaptcha" %> <%@ page import="net.tanesha.recaptcha.ReCaptchaFactory" %>
Luego, debes crear una instancia de reCAPTCHA:
ReCaptcha c = ReCaptchaFactory.newReCaptcha("your_public_key", "your_private_key", false);
Por último, el HTML para mostrar el widget de reCAPTCHA se puede obtener de las siguientes opciones: llamada a función:
c.createRecaptchaHtml(null, null)
En JSP, tu código podría verse de la siguiente manera:
<%@ 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>
No olvides reemplazar your_public_key
y your_private_key
por
los valores de tus claves de API.
En el servidor (cómo probar si el usuario ingresó la respuesta correcta)
En la aplicación que verifica tu formulario, primero deberás importar los Clases de reCAPTCHA:
import net.tanesha.recaptcha.ReCaptchaImpl; import net.tanesha.recaptcha.ReCaptchaResponse;
A continuación, debes insertar el código que verifique la solución de reCAPTCHA que ingresó el usuario. El siguiente ejemplo (en JSP) muestra cómo se puede hacer esto:
<%@ 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>
En el código anterior:
remoteAddr
es la dirección IP del usuario (que se pasa al reCAPTCHA).
servidores)uresponse
contiene la respuesta del usuario al desafío de reCAPTCHA.Importante: Almacenamiento en caché de DNS
Java tiene un problema molesto que puede causar la conexión entre tu servidor y reCAPTCHA se interrumpa cada pocos meses y reCAPTCHA dejará de funcionar en tu sitio cuando sucede. Sigue leyendo para descubrir cómo solucionar este problema.
De forma predeterminada, la máquina virtual Java (JVM) almacena en caché todas las búsquedas de DNS para siempre, en lugar de usar el valor del tiempo de actividad (TTL) que se especifica en el registro DNS de cada host. Para los usuarios de cómo no saberlo, una búsqueda de DNS es una solicitud enviada a un servidor DNS que convierte de host fácil de leer con una dirección IP. Por ejemplo, convierte www.recaptcha.net al Dirección IP 69.12.97.164 Es, por supuesto, mucho más complejo que esto, y si quieres para obtener más información, en la entrada de Wikipedia DNS es un buen punto de partida.
Aunque no es frecuente, los servidores de reCAPTCHA pueden cambiar las direcciones IP. Debido a que Java almacena en caché de búsqueda para siempre, esto puede provocar que falle la conexión entre tu servidor y reCAPTCHA cuando cambia la dirección IP de reCAPTCHA. Si esto sucede, reiniciar tu JVM (p.ej., reiniciar Tomcat) puede solucionar el problema porque provoca una nueva búsqueda de DNS. Sin embargo, es probable que no reiniciar tu JVM una vez cada pocos meses cada vez que tu sitio falle porque servidores cambiaron la dirección IP.
Para solucionar este problema de forma definitiva, pasa -Dsun.net.inetaddr.ttl=30 a tu app-server (esto le indica a Java que solo almacene en caché el DNS durante 30 segundos) En Tomcat para Windows, esto puede realizar por
- Detener Tomcat
- Ir a tomcat\bin
- Ejecuta Tomcat5w.exe
- Ir a la pestaña Java
- Se agregó la propiedad Java a la sección de opciones de Java: -Dsun.net.inetaddr.ttl=30.
- Salir
- Iniciar Tomcat
En Tomcat para Linux o MacOS X, debes ejecutar el siguiente comando en la línea de comandos. (y, luego, reinicia Tomcat):
export JAVA_OPTS="$JAVA_OPTS -Dsun.net.inetaddr.ttl=30"
Este es un artículo explicando más sobre este tema.