JCaptchaの代替品を探しています。JCaptchaはもはやメンテナンスされていないようで、最初はあまり良くありません。置き換えは、JavaEE webappsとうまく統合する必要があります。
ご覧のとおり、3つのオプションがあります。
誰かが他の人を使ったことがありますか?
私は SimpleCaptcha の著者です。人類のためにできる限りReCaptchaを使用することをお勧めしますが、一部の組織にはReCaptchaなどのライブラリを禁止するポリシーがあるため、SimpleCaptchaを提供しました。 SimpleCaptchaは、完全にスタンドアロンであり、外部依存関係がないことを意図しています。J2EEコンテナ内にいる限り、うまくいくはずです。
また、SimpleCaptchaはJava 1.5またはJava 6。
ReCaptchaがダウン/使用不可になるとどうなりますか?サービスは単純に停止しますか?ダウンしているときに単にサインアップを停止しますか? ReCaptchaが実行されていなくても、ユーザーがサインアップできるようにしますか?もしそうなら、これのセキュリティへの影響は何ですか?特に、CAPTCHAを単なるサインアップ以上に使用している場合、パスワードフォーム、ログインフォームなどをリセットします。これらは、CAPTCHAコンポーネントなしでは使用できません。
Java CAPTCHAの世界は悲しい状態にあります。SimpleCaptchaは、ホストされたサービスを受け入れられない私たちにとって最良のソリューションのようです。
Recaptchaが今日ほど人気になる前に http://kaptcha.googlecode.com を作成しました。また、それを自分でホストする機能も提供しますが、これは状況によっては必要になる場合があります。
Kaptchaは、SimpleCaptchaの大幅に変更および更新されたバージョンであり、JDK5/6をサポートしています。
SimpleCaptchaは本当にすてきで使いやすいです。
次に、JSF 2.0でSimpleCaptchaを使用する方法の例を示します(ホームページにはJSPの例があります)
Beanにcaptcha値を保存することすら気にかけていないことに注意してください。検証するだけです。
豆:
// 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>
楽しい :-)
Kaptchaは、サードパーティのキャプチャサービス(recaptchaなど)に依存するのではなく、独自のキャプチャサービスをホストする場合、Recaptchaに代わるニースです。