66

我正在寻找 JCaptcha 的替代品,它似乎不再被维护,而且一开始也不是很好。替代品必须与 JavaEE webapps 很好地集成。

如我所见,有三个选项:

  • JCaptcha - 不再维护的原始 API
  • SimpleCaptcha - 更好的 API,更好的验证码,但似乎只是 Java6
  • ReCaptcha - 易于使用,使用远程 Web 服务生成验证码,但对外观和感觉没有太多控制

有没有人用过其他的,他们会推荐?

4

6 回答 6

72

我是SimpleCaptcha的作者。虽然我会推荐——为了人类的缘故——尽可能使用 ReCaptcha,但我提供了 SimpleCaptcha,因为一些组织有禁止像 ReCaptcha 这样的库的政策。SimpleCaptcha 是完全独立的,没有外部依赖项:只要您在 J2EE 容器中,就应该很好。

此外,SimpleCaptcha 现在可用于 Java 1.5 或 Java 6。

于 2010-12-24T20:31:59.197 回答
26

ReCaptcha是您应该使用的唯一验证码,因为它是唯一让世界变得更美好(将 OCR 结果改进为旧文本)的验证码,具有几乎无限的数据库。

所有其他验证码通常受到其数据库的限制,或者对这个世界没有任何好处。

编辑 :: 我找到了如何使用 recaptcha 实现验证码的步骤。

您可以在此处使用 java 检查在线和离线验证码

于 2009-05-01T07:22:08.507 回答
20

当 ReCaptcha 关闭/不可用时会发生什么?您的服务会停止吗?您是否只是在它关闭时停止注册?即使 ReCaptcha 没有运行,您是否允许用户注册?如果是这样,这对安全有什么影响?特别是如果您将 CAPTCHA 用于注册以外的用途,例如重置密码表单、登录表单……如果没有 CAPTCHA 组件,您将无法接受这些操作。

验证码的 Java 世界处于可悲的状态,对于我们这些无法接受托管服务的人来说,SimpleCaptcha 似乎是最好的解决方案。

于 2009-08-03T09:54:54.133 回答
11

在 recaptcha 变得像今天这样流行之前,我创建了http://kaptcha.googlecode.com 。它还使您能够自己托管它,这在某些情况下可能是必要的。

Kaptcha 是 SimpleCaptcha 的一个经过大量修改和更新的版本,支持 JDK5/6。

于 2010-02-02T06:30:53.763 回答
5

SimpleCaptcha 非常好用且易于使用。

这是一个如何在 JSF 2.0 中使用 SimpleCaptcha 的示例(主页有一个 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>

享受 :-)

于 2011-01-31T17:48:24.227 回答
3

如果您希望托管自己的验证码服务而不是依赖第三方验证码服务(如 recaptcha),Kaptcha 是 Recaptcha 的一个很好的替代品。

于 2010-07-06T21:42:31.457 回答