example - Recomendaciones para bibliotecas de java captcha
simplecaptcha (7)
Estoy buscando un reemplazo para JCaptcha, que no parece mantenerse más, y no es muy bueno para empezar. El reemplazo debe integrarse muy bien con las aplicaciones web JavaEE.
Como puedo ver, hay tres opciones:
- JCaptcha: ya no se mantiene, crudo API
- SimpleCaptcha: API mucho más agradable, captchas más bonitas, pero parece ser solo Java6
- ReCaptcha: fácil de usar, utiliza un servicio web remoto para generar captchas, pero no tiene mucho control sobre el aspecto y la sensación.
Alguien ha usado otros que ellos recomendarían?
¿Qué sucede cuando ReCaptcha está inactivo / no disponible? ¿Su servicio simplemente se detiene? ¿Simplemente dejas de inscribir a las personas cuando no funciona? ¿Permite que los usuarios se registren incluso si ReCaptcha no se está ejecutando? Si es así, ¿cuáles son las implicaciones de seguridad de esto? Especialmente si usa CAPTCHA para algo más que el registro, por ejemplo, restablecer formularios de contraseña, formularios de inicio de sesión, ... que no sería aceptable usar sin el componente CAPTCHA.
El mundo Java de CAPTCHAs está en un estado triste, con SimpleCaptcha aparentemente la mejor solución para aquellos de nosotros que no pueden aceptar un servicio alojado.
Creé http://kaptcha.googlecode.com antes de que recaptcha se hiciera tan popular como lo es hoy. También le ofrece la posibilidad de alojarlo usted mismo, lo que puede ser necesario en algunas situaciones.
Kaptcha es una versión altamente modificada y actualizada de SimpleCaptcha y es compatible con JDK5 / 6.
Kaptcha es una buena alternativa a Recaptcha si está buscando hospedar su propio servicio de captcha en lugar de depender de un servicio de captcha de terceros (como recaptcha).
Pude obtener la fuente (uno por uno desde el navegador, no GIT :-() y compilar con 1.5. Tuve un problema con la versión de JDK 1.5 al arrojar el error de versión de clase incorrecta (la que aparece cuando se compila con versiones anteriores) la versión de java está en mal estado) que se resolvió cuando copié el contenedor que construí y funciona como un hechizo. Le aconsejo encarecidamente a cualquiera que use esto. Intenté jcaptcha y debo decir que apesta ... los visitantes de la web no deberían tiene que luchar para verificar el código en la imagen, que derrota el propósito ....
SimpleCaptcha es realmente agradable y fácil de usar.
Aquí hay un ejemplo de cómo usar SimpleCaptcha con JSF 2.0 (la página de inicio tiene un ejemplo para JSP)
Tenga en cuenta que ni siquiera me molesto en almacenar el valor de captcha en el bean, solo lo estoy validando.
El frijol:
// imports missing here
@ManagedBean
@SessionScoped
public class LoginBean implements Serializable
{
public void validateCaptcha(FacesContext context,
UIComponent componentToValidate,
Object value)
throws ValidatorException
{
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
Captcha secretcaptcha = (Captcha) session.getAttribute(Captcha.NAME);
if (secretcaptcha.isCorrect(value.toString()))
return;
// optional: clear field
((HtmlInputText) componentToValidate).setSubmittedValue("");
throw new ValidatorException(new FacesMessage("Captcha does not match"));
}
}
El segmento relevante del facelet:
<h:form id="CaptchaForm">
Type this: <br/>
<h:graphicImage id="CaptchaImgID" value="/simpleCaptcha.png"/> <br/>
<h:inputText id="CaptchaID"
required="true"
requiredMessage="Captcha missing"
validator="#{loginBean.validateCaptcha}"
validatorMessage="Captcha does not match"
immediate="true">
</h:inputText>
<br/>
<h:commandButton value="Check"/>
<p/>
<!-- message for the input field -->
<h:message id="CaptchaMsgID" for="CaptchaID" style="color:red" />
</h:form>
El segmento relevante de web.xml:
<servlet>
<servlet-name>SimpleCaptcha</servlet-name>
<servlet-class>nl.captcha.servlet.SimpleCaptchaServlet</servlet-class>
<init-param>
<param-name>captcha-width</param-name>
<param-value>250</param-value>
</init-param>
<init-param>
<param-name>captcha-height</param-name>
<param-value>75</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SimpleCaptcha</servlet-name>
<url-pattern>/simpleCaptcha.png</url-pattern>
</servlet-mapping>
Disfruta :-)
Soy el autor de SimpleCaptcha . Si bien recomendaría, por el bien de la humanidad, usar ReCaptcha donde pueda, proporcioné SimpleCaptcha porque algunas organizaciones tienen políticas que prohíben bibliotecas como ReCaptcha. SimpleCaptcha está destinado a ser completamente independiente, sin dependencias externas: mientras esté en un contenedor J2EE, debería estar bien.
Además, SimpleCaptcha ya está disponible para Java 1.5 o Java 6.
ReCaptcha es el único captcha que debes usar, porque es el único captcha que mejora el mundo (mejora los resultados de OCR en el texto antiguo), con una base de datos casi ilimitada.
Todos los otros captchas generalmente están limitados por su base de datos, o no hacen nada bueno en este mundo.
EDIT :: Encontré los pasos para implementar captcha usando recaptcha.