Question

Je cherche un remplaçant pour JCaptcha, qui ne semble plus être entretenu et n’est pas très bon au début. Le remplacement doit s’intégrer parfaitement aux applications Web JavaEE.

Comme je peux le voir, il y a trois options:

  • JCaptcha - API non maintenue non gérée
  • SimpleCaptcha - Une API beaucoup plus agréable, des captchas plus agréables, mais semble n'être que de Java6
  • ReCaptcha - facile à utiliser, utilise un service Web distant pour générer des captchas, mais n’a guère de contrôle sur son apparence

Quelqu'un en a-t-il déjà utilisé un autre, à recommander?

Était-ce utile?

La solution

ReCaptcha est le seul captcha que vous devriez utiliser, car il s'agit du seul captcha qui rend le monde meilleur (améliorez le résultats en ancien texte), avec une base de données presque illimitée.

Tous les autres captchas sont généralement limités par sa base de données ou ne font rien de bon dans ce monde.

EDIT :: J'ai trouvé des étapes pour implémenter captcha à l'aide de recaptcha.

Vous pouvez vérifier les captchas en ligne et hors ligne en utilisant Java ici

Autres conseils

Je suis l'auteur de SimpleCaptcha . Bien que je recommande - pour le bien de l’humanité - d’utiliser ReCaptcha autant que possible, j’ai fourni SimpleCaptcha car certaines organisations ont des règles interdisant les bibliothèques comme ReCaptcha. SimpleCaptcha se veut totalement autonome, sans dépendance externe: tant que vous êtes dans un conteneur J2EE, vous devriez être bon.

En outre, SimpleCaptcha est désormais disponible pour Java 1.5 ou Java 6.

Que se passe-t-il quand ReCaptcha est en panne / indisponible? Votre service s'arrête-t-il simplement? Est-ce que vous arrêtez simplement d'inscrire des gens quand c'est bas? Autorisez-vous les utilisateurs à s'inscrire même si ReCaptcha n'est pas en cours d'exécution? Si oui, quelles en sont les implications pour la sécurité? Surtout si vous utilisez CAPTCHA pour plus que la simple inscription, par exemple. réinitialiser les formulaires de mot de passe, les formulaires de connexion, ... qui ne pourraient être utilisés sans le composant CAPTCHA.

Le monde Java de CAPTCHAs est dans un triste état. SimpleCaptcha semble être la meilleure solution pour ceux d'entre nous qui ne peuvent accepter un service hébergé.

J'ai créé http://kaptcha.googlecode.com avant que recaptcha ne soit devenu aussi populaire qu'aujourd'hui. Il vous offre également la possibilité de l’organiser vous-même, ce qui peut être nécessaire dans certaines situations.

Kaptcha est une version fortement modifiée et mise à jour de SimpleCaptcha et prend en charge JDK5 / 6.

SimpleCaptcha est vraiment sympa et facile à utiliser.

Voici un exemple d'utilisation de SimpleCaptcha avec JSF 2.0 (la page d'accueil contient un exemple pour JSP)

Notez que je ne me soucie même pas de stocker la valeur captcha dans le bean, je ne fais que la valider.

Le haricot:

// 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"));
    }
}

Le segment pertinent du 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>

Le segment pertinent du fichier 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>

Profitez de: -)

Kaptcha est une bonne alternative à Recaptcha si vous souhaitez héberger votre propre service captcha au lieu de faire appel à un service captcha tiers (comme Recaptcha).

J'ai pu obtenir le code source (un par un à partir du navigateur, pas GIT :-() et le construire avec la version 1.5. J'ai eu un problème avec la version 1.5 du JDK générant une erreur de version de classe incorrecte (celle qui survient lorsque compilé avec l’ancienne version java est foiré), ce qui a été résolu lorsque j’ai copié le bocal que j’ai construit moi-même et que cela fonctionne à merveille. le Web ne devrait pas avoir à lutter pour vérifier le code de l'image, cela irait à l'encontre du but recherché.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top