miércoles, abril 15, 2015

Ejemplo de como se utiliza y usa recaptcha v2 con Java

Para poder utilizar recaptcha de Google en una págia web bajo Java, se ha de tener que seguir los siguientes pasos:

1) Autenticarse en Google e ir a la siguiente página:

https://www.google.com/recaptcha/admin#list

Donde tendremos que dar de alta nuestra página web.

2) Guardamos las Clave del Sitio y la Clave Secreta, la usaremos más tarde.

3) Montamos el formulario con el captcha, para ello:
Deberemos de pegar este fragmento antes de la etiqueta
de cierre en la plantilla HTML:

<script src="https://www.google.com/recaptcha/api.js"> </script>

Pega este fragmento dentro del elemento <form> exactamente donde quieras que aparezca el widget de reCAPTCHA:
<div class="g-recaptcha" data-sitekey="Clave del Sitio"> </div>

Ejemplo de JSP con un formulario que usa recaptcha v2:

<html> 
<head> 
         <script src="https://www.google.com/recaptcha/api.js"> </script> 
</head> 

<% 
String clavePublica = "XXXXXXXXXXXXXXXXXXX"; // Es la Clave del Sitio
%>

<body>
    <h1>Test recaptcha v2 con Java</h1> 
    <form action="Controller.jsp" method="get">
          Campo Texto: <input name="texto" placeholder="Campo cualquiera" type="text" /> 
          <div class="g-recaptcha" data-sitekey="<%=clavePublica%>"></div> 
           <button type="submit"> Enviar</button> 
    </form> 
</body>
</html>
 4) Montamos el controlador para verificar si se supera el captcha o no:
Una vez que recojamos todos los parámetros del formulario, veremos que aparece uno nuevo "g-recaptcha-response".

Para saber si el captcha se ha superado correctamente, se tendrá que llamar a la siguiente url (método get), pasándole los siguientes parámetros:

URL: https://www.google.com/recaptcha/api/siteverify
secret (requerido)   La Clave Privada
response(requerido)    El valor que obtenemos en el campo "g-recaptcha-response" del formulario.
remoteip    La ip del usuario.

Un ejemplo del código de como se hace esta llamada en JSP:

<html>

<body> 

<%
String ClaveSecreta = "XXXXXXXXXXXXXXXXXX"; // Es la Clave Privada
String ipusuario = request.getRemoteAddr();
String respuestaRecaptcha = request.getParameter("g-recaptcha-response");

String line, outputString = "";
try{
    java.net.URL url = new java.net.URL
    ("https://www.google.com/recaptcha/api/siteverify?secret="+ClaveSecreta+
    "&response="+respuestaRecaptcha+"&remoteip="+ipusuario); 
    java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");

     java.io.BufferedReader reader = new java.io.BufferedReader
    (new java.io.InputStreamReader(conn.getInputStream()));

     while ((line = reader.readLine()) != null) {
        outputString += line;
        }
}
catch(Exception e){
    e.printStackTrace();
}

%>   

<h1>Test recaptcha v2 con Java - Recepción del formulario</h1> 

<h2> Datos recopilados del formulario:</h2> 

<b>Campo Texto</b>: <%= request.getParameter("texto") %>
<h2>Datos recopilados del formulario que provienen del recaptcha:</h2>

<b>Campo g-recaptcha-response</b>: <%= respuestaRecaptcha %>


<h2>Verificamos con Recaptcha si se ha superado el captcha</h2>

<b>Clave Secreta</b>: <%=ClaveSecreta%>

<b>Ip Usuario</b>: <%=ipusuario%>

<b>Respuesta bruta Json de recaptcha</b>:<%=outputString%>
</body>
</html>


Palabras y frases clave:
Como integrar recaptcha v2 de google un un formulario JSP o JAVA
Usar recaptcha con Java
Como programar un formulario Java con re-captcha
Ejemplo de un formulario JSP con captcha
Ejemplo captcha en Java