java - kaptcha - simplecaptcha jar




針對java驗證碼庫的建議 (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>

請享用 :-)

我正在尋找JCaptcha的替代品,它似乎不再維護,並且開始時並不是很好。 替換必須與JavaEE webapps很好地集成。

我可以看到,有三種選擇:

  • JCaptcha - 不再維護原油API
  • SimpleCaptcha - 更好的API,更好的驗證碼,但似乎只是Java6
  • ReCaptcha - 易於使用,使用遠程Web服務生成驗證碼,但無法控制外觀

有沒有人使用過他們推薦的其他人?


ReCaptcha是你應該使用的唯一驗證碼,因為它是唯一能夠讓世界變得更好的驗證碼(將OCR結果改進舊文本),幾乎無限的數據庫。

所有其他驗證碼通常都受其數據庫的限制,或者對這個世界沒有任何好處。

編輯::我找到瞭如何使用recaptcha實現驗證碼的步驟。

您可以here使用java檢查在線和離線驗證碼


我之前創建了http://kaptcha.googlecode.com,之後recaptcha變得像今天一樣受歡迎。 它還為您提供了自己託管的能力,這在某些情況下可能是必要的。

Kaptcha是SimpleCaptcha的一個經過大量修改和更新的版本,支持JDK5 / 6。


我是SimpleCaptcha的作者。 雖然我建議 - 出於人性的考慮 - 盡可能使用ReCaptcha,我提供了SimpleCaptcha,因為有些組織的政策禁止像ReCaptcha這樣的庫。 SimpleCaptcha是完全獨立的,沒有外部依賴:只要你在J2EE容器中,你應該是好的。

此外,SimpleCaptcha現在可用於Java 1.5或Java 6。


當ReCaptcha關閉/不可用時會發生什麼? 您的服務是否會停止? 當你失敗時,你只是停止簽名嗎? 即使ReCaptcha沒有運行,您是否允許用戶註冊? 如果是這樣,這有什麼安全隱患? 特別是如果您使用CAPTCHA而不僅僅是註冊,例如重置密碼表單,登錄表單,......如果沒有CAPTCHA組件,則無法接受。

CAPTCHA的Java世界處於悲傷狀態,SimpleCaptcha似乎是那些無法接受託管服務的人的最佳解決方案。





simplecaptcha