kaisehのブログ このページをアンテナに追加

2009-05-02

JCaptchaによる画像認証

先日、TopHatenarが全ドメイン対応したことで、任意のブログURLを登録できるようになりましたが、そこで画像認証が必要だったので、JCaptchaというライブラリを使用しました。

JCaptcha overview

JavaCAPTCHAライブラリには他にもSimpleCaptchaなどありますが、僕が試した中ではJCaptchaが一番良いと思いました。

使用方法としては、まずImageCaptchaServiceのsingletonインスタンスを用意しておきます。

import com.octo.captcha.service.image.DefaultManageableImageCaptchaService;
import com.octo.captcha.service.image.ImageCaptchaService;

public class Captcha {
    private static ImageCaptchaService service =
        new DefaultManageableImageCaptchaService();

    public static ImageCaptchaService getService() {
        return service;
    }
}

そしてリクエスト時に、固有のIDを使ってチャレンジ画像を生成します。IDは何でも良いですが、ほとんどの場合はセッションIDを使うはずです。

    ImageCaptchaService service = Captcha.getService();
    BufferedImage challenge = service.getImageChallengeForID(session.getId());
    ...

回答がサブミットされたら、チャレンジのときと同じIDを使って検証します。

    ImageCaptchaService service = Captcha.getService();
    Boolean check = service.validateResponseForID(session.getId(), answer);
    if (!Boolean.TRUE.equals(check)) {
        ...
    }

デフォルトで単語辞書とか画像フィルタが適当にセットアップされているので、特に設定しなくても簡単に使えます。ただ、デフォルト設定はちょっと厳しすぎるかもしれないです。↓読めない…。

f:id:kaiseh:20090503023920p:image f:id:kaiseh:20090503024415p:image

yone098yone098 2009/05/03 03:48 読めない。。。

kaisehkaiseh 2009/05/03 13:55 ですよね。。。

c9katayamac9katayama 2009/05/06 12:23 fの後の2文字が絶望的ですね。。。

kaisehkaiseh 2009/05/06 15:58 はい。。。
JCaptchaは、デフォルト設定を変えるのが面倒くさいのが難点です。

kamkikamki 2011/07/15 00:17 どのクラスで設定変更できるんでしょうか。

トラックバック - http://d.hatena.ne.jp/kaiseh/20090502/1241286415