Kaptcha
Kaptcha es una librería Java para implementar un sistema Captcha.
Usar Kaptcha en un proyecto web es fácil. Todo lo que se necesita es agregar el jar al proyecto, hacer una referencia al servlet del kaptcha en el web.xml y luego validar el dato submiteado en el form con la sesión del servlet que generó el captcha.
Integración en una aplicación web Java
Aquí los detalles de como integrar Kaptcha a tu aplicación.
Poner el .jar de Kaptcha apropiado (dependiendo de tu JDK) en WEB-INF/lib de tu proyecto. Poner el tag de la imagen en la página web (checkeando que coincida el path de .jpg con el url-pattern que esta definido en el web.xml)
<form action="submit.action">
<img src="kaptcha.jpg" /> <input type="text" name="kaptcha" value="" />
</form>
Poner la referencia en tu web.xml (cheando que el url-pattern se el mismo que el agregado en la página web)
<servlet>
<servlet-name>Kaptcha</servlet-name> <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>Kaptcha</servlet-name> <url-pattern>/kaptcha.jpg</url-pattern>
</servlet-mapping>
Agregar en el código que hace la validación:
String kaptchaExpected = (String)request.getSession()
.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
String kaptchaReceived = request.getParameter("kaptcha");
if (kaptchaReceived == null || !kaptchaReceived.equalsIgnoreCase(kaptchaExpected)) {
setError("kaptcha", "Invalid validation code.");
}
Eso es todo!
Como testear una aplicacion que usa Kaptcha
La configuración del servlet permite varias opciones de inicialización, como ser cantidad de caracteres que se mostrarán o bien las letras que puede usar para generar el código. Una opcion es configurar para que se muestre un solo caracter con una sola opcion, por ejemplo que siempre muestre la letra a.
Ejemplo de como quedaria la configuración:
<servlet>
<servlet-name>Kaptcha</servlet-name>
<servlet-class>
com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
<init-param>
<param-name>kaptcha.border</param-name>
<param-value>yes</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.char.string</param-name>
<param-value>aa</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.char.length</param-name>
<param-value>1</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>