JCaptcha – Generación de Captchas en Java

2
19117

JCaptcha – Generación de Captchas en Java

Índice de contenidos.

1. Introducción

En este tutorial veremos la librería JCaptcha. Se trata de una librería opensource para generación de captchas en Java. En todo formulario web que pida al usuario introducir datos que posteriormente serán procesados deberíamos introducir una imagen
de tipo Captcha que nos asegure que quién está enviando el formulario es un humano y no una máquina. Si no añadimos esta característica no podríamos evitar que un robot o programa
automatizado pudiera darse de alta repetidas veces en nuestra web, participar en encuestas, etc.

JCaptcha nos aporta las herramientas necesarias para generar las imágenes que utilizaremos para validar nuestros formularios proporcionándonos además la personalización
de la imagen permitiéndonos cambiar su tamaño, apariencia, fuente, colores, etc.

Otra de las grandes ventajas de esta librería es que se encuentra en los repositorios públicos de Maven por lo que con añadir la dependencia en nuestro pom.xml bastaría y por
otro lado se integra con Spring por lo que su configuración es muy sencilla.

2. Entorno.

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil Asus G50Vseries (Core Duo P8600 2.4GHz, 4GB RAM, 320 GB HD).
  • Sistema operativo: Windows 7
  • ICEFaces 1.8.2
  • JCaptcha 1.0
  • Maven 2.2.1
  • Spring 2.5.6
  • Framework wuija 1.9

3. pom.xml

Para proyectos con Maven basta con añadir la dependencia en el pom.xml. Suponemos que en el pom.xml ya tenemos configuradas las dependencias a Spring, JSF, ICEFaces, etc.

4. Configuración básica de JCaptcha con Spring

Existen varias formas de configurar JCaptcha en un proyecto web. Por un lado podemos desplegar un Servlet (SimpleImageCaptchaServlet) que atiende las peticiones del captcha,
ver documentación aquí. Por otro lado podemos configurar
los servicios necesarios para generación y validación del captcha a través de Spring. En este tutorial seguiremos esta configuración.

En el fichero de configuración de Spring applicationContext.xml añadimos el servicio de generación de las imágenes:

Con esto ya tenemos disponible este servicio para la generación de la imagen del captcha, pero eso sí con su configuración por defecto que en muchos casos nos puede ser más que
suficiente. En nuestra aplicación debemos crear la lógica de negocio, utilizando el servicio levantado anteriormente, para crear una imagen de captcha, validar la palabra ‘oculta’
del captcha, etc. Para ello crearemos un Managed Bean de JSF gestionado por String mediante la anotación @Controller y una clase Captcha que se encargará de todo lo relacionado
con las operaciones del captcha.

La clase Captcha queda así:

El controlador de la vista UserCtrl se encargará de recuperar los datos del formulario y validar el captcha.

Por último la página home.jspx para sacar el formulario queda así:

El resultado del formulario queda así:

Si metemos mal la palabra del captcha no se registrarán los datos del formulario por lo que impedimos acceder a la lógica de negocio:

Es importante regenerar el captcha cada vez que el usuario falla ya que de lo contrario podrían romper nuestra seguridad con un ataque de diccionario. También se le suele dar al usuario la posibilidad de generar un nuevo captcha debido a que algunas veces
resulta complicado averiguar la palabra que se esconde en el captcha.

Una vez que el usuario introduce la palabra correctamente pasamos la validación y llamaríamos a la lógica de negocio, en nuestro caso recogemos el nombre del usuario y le
damos la bienvenida.

5. Configuración avanzada de JCaptcha

Por defecto JCaptcha utiliza un diccionario de palabras en inglés pero podemos configurar esta opción añadiendo nuestro propio diccionario asociado al locale del usuario.

Como dijimos en la introducción JCaptcha nos permite personalizar completamente la generación de la imagen a través de los servicios correspondientes en cada caso. Para
insertar nuestro propio fichero de palabras debemos crear un toodlist_es (para el locale en español). También nos permite configurar los colores del texto, el tamaño de la fuente,
el fondo de la imagen así como los filtros para deformar la imagen. Un ejemplo de esta configuración sería el siguiente:

El resultado del captcha con esta configuración cambia totalmente:

6. Conclusiones

El resultado de la utilización de esta herramienta no puede ser más satisfactorio ya que permite de forma muy sencilla configurarla y adecuarla a nuestras necesidades gracias
al soporte de Spring. Siempre es mucho mejor utilizar librerías de terceros para nuestros proyectos que tener que hacer todo nosotros. Imaginaos el esfuerzo que supondría crear algo equivalente a
JCaptcha si lo necesitáramos para nuestros proyectos.

Un saludo. Juan.

2 Comentarios

  1. Hola, muchas gracias por el post. Me ha sido de gran utilidad.

    Quería comentar que para aplicar vuestro ejemplo en mi código, he tenido modificar el fichero de configuración \\\’faces-beans.xml\\\’, en concreto el bean que hace uso del captcha, y modificar la configuración de jCaptcha en application-context.xml ya que las palabras de mi diccionario son todas de cuatro caracteres.

    La modificación en faces-beans.xml es:

    imageCaptchaService
    #{imageCaptchaService}

    (y en el bean implementar get y set de la propiedad imageCaptchaService).

    La modificación de application-context.xml es en el bean \\\’simpleWhitePaster\\\’, cambiar los argumentos de tipo Integer y darles valor 4.

    Saludos.

Dejar respuesta

Please enter your comment!
Please enter your name here