我正在寻找JCaptcha的替代品,它似乎不再被维护,并且开始时并不是很好。替换必须与JavaEE webapps很好地集成。
我可以看到,有三种选择:
有没有人使用过他们推荐的其他人?
答案 0 :(得分:71)
我是SimpleCaptcha的作者。虽然我建议 - 为了人类的缘故 - 尽可能使用ReCaptcha,我提供了SimpleCaptcha,因为有些组织有禁止像ReCaptcha这样的库的政策。 SimpleCaptcha应该是完全独立的,没有外部依赖:只要你在J2EE容器中,你应该是好的。
此外,SimpleCaptcha现在可用于Java 1.5或Java 6.
答案 1 :(得分:25)
ReCaptcha是您应该使用的唯一验证码,因为它是唯一能够让世界变得更好的验证码(将OCR结果改进旧文本),几乎无限制的数据库。
所有其他验证码通常受其数据库的限制,或者对这个世界没有任何好处。
编辑::我找到了如何使用recaptcha实现验证码的步骤。
答案 2 :(得分:19)
当ReCaptcha关闭/不可用时会发生什么?您的服务是否会停止?当你失败时,你只是停止签名吗?即使ReCaptcha没有运行,您是否允许用户注册?如果是这样,这有什么安全隐患?特别是如果您使用CAPTCHA而不仅仅是注册,例如重置密码表单,登录表单,...如果没有CAPTCHA组件,则无法接受。
CAPTCHA的Java世界处于悲伤状态,SimpleCaptcha似乎是那些无法接受托管服务的人的最佳解决方案。
答案 3 :(得分:10)
我在recaptcha变得像今天这样受欢迎之前创建了http://kaptcha.googlecode.com。它还为您提供了自己托管的能力,这在某些情况下可能是必要的。
Kaptcha是SimpleCaptcha的一个经过大量修改和更新的版本,支持JDK5 / 6.
答案 4 :(得分:5)
SimpleCaptcha非常好用且易于使用。
以下是如何将SimpleCaptcha与JSF 2.0一起使用的示例(主页有JSP示例)
请注意,我甚至不打算将验证码值存储在bean中,我只是在验证它。
豆子:
// 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"));
}
}
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>
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>
享受: - )
答案 5 :(得分:3)
如果您希望托管自己的验证码服务而不是依赖第三方验证码服务(如recaptcha),Kaptcha是Recaptcha的一个不错的选择。
答案 6 :(得分:-2)
我能够获得源代码(从浏览器逐个获取,而不是GIT :-()并使用1.5进行构建。我遇到了JDK 1.5版本的问题,导致了错误的类版本错误(当出现错误时出现的错误)用旧的java版本编译搞砸了)当我复制我自己构建的jar并且它就像魅力一样解决了。我强烈建议任何人使用它。我试过jcaptcha而且我必须说它糟透了...访问者网络不应该努力验证图像中的代码,这会破坏目的....