针对javavalidation码库的build议
我正在寻找替代JCaptcha,似乎不再被维护,并不是很好开始。 替代品必须与JavaEE webapps很好地集成。
我可以看到,有三种select:
- JCaptcha – 不再维护,原油API
- SimpleCaptcha – 更好的API,更好的validation码,但似乎只是Java6
- ReCaptcha – 易于使用,使用远程Web服务生成validation码,但对外观和感觉控制不佳
有没有人使用过其他人,他们会推荐?
ReCaptcha是你应该使用的唯一的validation码,因为它是使世界变得更好的唯一的validation码(改进旧文本的OCR结果),几乎没有限制的数据库。
所有其他validation码通常受其数据库的限制,或者对这个世界没有任何好处。
编辑::我find了如何使用recaptcha实现validation码的步骤。
你可以在这里使用java 来检查在线和离线validation码
我是SimpleCaptcha的作者。 虽然我会build议 – 为了人类的利益 – 尽可能使用ReCaptcha,我提供了SimpleCaptcha,因为有些组织制定了禁止ReCaptcha这样的图书馆的政策。 SimpleCaptcha是完全独立的,没有外部依赖性:只要你在J2EE容器中,你应该是好的。
此外,SimpleCaptcha现在可用于Java 1.5或Java 6。
ReCaptcha停机/不可用时会发生什么? 你的服务是否停止? 当你停下来的时候,你是否停止签名? 即使ReCaptcha没有运行,您是否允许用户注册? 如果是这样,那么这对安全有什么影响? 特别是如果您使用CAPTCHA不仅仅是注册,例如重置密码表单,login表单等等,这些在没有CAPTCHA组件的情况下使用是不可接受的。
CAPTCHA的Java世界处于一种悲伤的状态,SimpleCaptcha似乎是我们那些不能接受托pipe服务的人们的最佳解决scheme。
在recaptcha变得像今天这样受欢迎之前,我创build了http://kaptcha.googlecode.com 。 它也为您提供自己托pipe的能力,在某些情况下这可能是必要的。
Kaptcha是SimpleCaptcha的重大修改和更新版本,支持JDK5 / 6。
SimpleCaptcha真的很好,易于使用。
下面是一个如何使用SimpleCaptcha和JSF 2.0的例子(主页有一个JSP的例子)
请注意,我甚至不打算将validation码值存储在bean中,我只是validation它。
豆:
// 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")); } }
小脸的相关部分:
<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>
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>
请享用 :-)
如果您想要托pipe自己的validation码服务,而不是依靠第三方validation码服务(如recaptcha),则Kaptcha是Recaptcha的不错select。
我能够得到源代码(来自浏览器,而不是GIT :-(),并用1.5构build。我遇到了JDK 1.5版本的问题,它抛出了错误的类版本错误(在使用旧版编译时出现的错误Java版本搞砸了),当我复制我build立自己的jar,它的作品就像一个魅力,我强烈build议任何人使用这个我试过jcaptcha,我必须说它糟透了。不得不努力validation图像中的代码,这打破了目的….