Jcaptchaは非常に強力です。画像ベースの検証コードだけでなく、サウンドベースの検証コードも生成できます(SINAは2倍の検証コードを使用します)。この記事では、jcaptchaライブラリと使用例を簡単に紹介します。以下で見てみましょう。
jcaptchaライブラリをダウンロードしてください
Maven依存関係は次のように追加されます:
<依存関係> groupid> com.octo.captcha </groupid> <artifactid> jcaptcha </artifactid> <バージョン> 1.0 </version> </dependency>
単純なクラスをカプセル化しました
com.octo.captcha.component.image.backgroundgenerator.backgroundgenerator; Import com.octo.captcha.component.image.backgroundgenerator.filereaderandombackgroundgenerator; Import com.octo.captcha.component.image.color.color.randomlistcolorgenerator; com.octo.captcha.component.image.fontgenerator.fontgenerator; import com.octo.captcha.component.image.fontgenerator.randomfontgenerator; Import com.octo.captcha.component.image.textpaster.decoratedrandomtextpusterth com.octo.captcha.component.image.textpaster.textpaster; image com.octo.captcha.component.image.textpaster.textdecorator.textdecorator; image com.octo.captcha.component.image.image.wordtoimage.comportedwordtoedwordtoedwordword com.octo.captcha.component.image.wordtoimage.image.wordtoimage; image com.octo.captcha.component.word.wordgenerator.randomwordgenerator; import com.octo.captcha.component.word.wordgenerator.wordgenerator; import com.octo.captchaine.Engien.Engine.capt.captchaineator com.octo.captcha.engine.image.listimagecaptchaengine; Import com.octo.captcha.image.gimpy.gimpyfactory; import java.awt。*;/***検証コード画像を生成するクラスmax_word_length = 4; //最大検証コードプライベート静的最終整数image_height = 30; //検証コードイメージプライベート静的最終整数image_width = 130; //検証コード画像幅private widtic静的な最終文字列random_word = "0123456789"; //ランダム文字//検証コードのランダムフォントプライベート静的ファイナルフォント[] random_font = new font [] {new font( "nyala"、font.bold、min_font_size)、new font( "arial"、font.bold、min_font_size) font.bold、min_font_size)、new Font( "Credit Valley"、font.bold、min_font_size)、new Font( "Impact"、font.bold、min_font_size)}; //検証コードランダムカラープライベート静的最終色[] random_color = new Color [] {新しい色(255、255、255)、新しい色(255、220、220)、新しい色(220、255、255)、新しい色(220、220、255)、新しい色(255、255、220)、新しい色(220、255、220);プライベートstatic listimagecaptchaengine captchaengine; public static captChaengine getCaptChaengine(final String imgpath){if(captchaengine == null){synchronized(capchahelper.class){if(captchaengine = null && imgpath!= null){captchaengine = new listimagecaptchainit bubtion( randomListColorGenerator randomListColorGenerator = new RandomListColorGenerator(random_color); BackgroundGenerator BackgroundGenerator = new fileReaderrandombackgroundgenerator(image_width、image_height、imgpath); wordgenerator wordgenerator = new randomwordgenerator(random_word); fontgenerator fontgenerator = new RandomFontGenerator(min_font_size、max_font_size、random_font); textDecorator [] textDecorator = new TextDecorator [] {}; TextPaster TextPaster = new DecoratedRandomTextPaster(min_word_length、max_word_length、randomlistcolorgenerator、textdecorator); wordtoimage wordtoimage = new composedwordtoimage(fontgenerator、backgroundgenerator、textpaster); AddFactory(new GimpyFactory(WordGenerator、WordToImage)); }}; }}} captchaengineを返します。 }}Webページの正しいコード画像のリクエストに応答する
このリクエストに応答するservletを定義できます。 springMVCを使用する場合は、 Controllerのメソッドを使用してこのリクエストに応答することもできます。いずれにせよ、パスは:”/aaa/captcha”など、 servlet或controllerに対応するメソッドを指定する必要があります。
次に、このパスのリクエストに応答するサーブレットで、次のように書くことができます。
//パスを取得して、検証コードの背景画像を取得します。このパスは、背景文字列captcha_backgrounds = session.getServletContext()。getRealPath( "/web-inf/img/captcha"); captchaengine ce = capchahelper.getCaptchaengine(Captcha_backgrounds); //現在の検証コードは、管理者WebページのJSを使用してサーバーから取得する必要がありますCaptcha Captcha = CE.GetNextCaptcha(); //確認のために、CAPTCHAオブジェクトをセッションに入れて、クライアントが確認コードreq.getSession()。setAttribute( "Captcha"、Captcha)を提出するときを確認します。 //検証コード画像を取得します。これは、非圧縮ビットマップbufferedimage image =(bufferedimage)captcha.getChallenge()です。 resp.setContentType( "image/jpeg"); Imageio.write(image、 "jpg"、resp.getOutputStream());
SpringMVCを使用する場合は、次のように書いてください。
//パスを取得して、検証コードの背景画像を取得します。このパスは、背景文字列captcha_backgrounds = session.getServletContext()。getRealPath( "/web-inf/img/captcha"); captchaengine ce = capchahelper.getCaptchaengine(Captcha_backgrounds); // jsを使用して、管理者Webページのサーバーから現在の検証コードを取得する必要がありますcaptcha captcha = ce.getnextcaptcha(); //検証については、Captchaオブジェクトをセッションに入れて、session.setattribute( "Captcha")、Captcha)を確認します。 //検証コード画像を取得します。これは、非圧縮ビットマップbufferedimage image =(bufferedimage)captcha.getChallenge()です。 bytearrayoutputStream bao = new bytearrayoutputStream(); // JPGに凝縮し、出力ストリームImageio.Write(Image、 "jpg"、bao)に書き込まれる必要があります。 bao.tobytearray()を返します。
どちらの方法でも、返されたバイナリデータはクライアントに。
String captcha_backgrounds = session.getServletContext().getRealPath(“/WEB-INF/img/captcha”);
次のパス/WEB-INF/img/captchaには、検証コード画像の背景として複数の写真が配置されています。 JPEGでなければなりません。サイズに制限がない場合があります。自分で試すことができます。
<img>を使用して、Webページでこのアドレスを指す
<img id = "captcha" src = " /captcha_img" onclick = "refreshcaptchaimg()" />
JS関数refreshCaptchaImg()は、画像のクリックに応答します。クリックするたびに、新しい検証コード画像が取得されます。正しいコード画像を再取得する方法は?
IMGのSRC属性を変更するだけですが、ここではこの属性を毎回同じアドレスで設定するために、実際の更新を引き起こさないようにするため、メソッドrefreshCaptchaImg()は次のように実装されます。
function refreshcaptchaimg(){//サーバーからの再ダウンロード検証コード画像//この場所にパラメーターを純粋に強制リフレッシュのために追加します。そうしないと、SRCが指し示しているURLアドレスが変更されていないため、ブラウザは本当に画像を更新しません。上記は、Javaの検証コード生成ライブラリであるJcaptchaの紹介と使用です。 Javaを学ぶことは誰にとっても役立つことを願っています。