复制番号代番号次のように:
パッケージ com.g.core.common.JCaptcha;
java.awt.Colorをインポートします。
java.awt.Fontをインポートします。
com.octo.captcha.component.image.backgroundgenerator.BackgroundGenerator をインポートします。
com.octo.captcha.component.image.backgroundgenerator.FileReaderRandomBackgroundGenerator をインポートします。
com.octo.captcha.component.image.color.RandomListColorGenerator をインポートします。
com.octo.captcha.component.image.fontgenerator.FontGenerator をインポートします。
com.octo.captcha.component.image.fontgenerator.RandomFontGenerator をインポートします。
com.octo.captcha.component.image.textpaster.DecoratedRandomTextPaster をインポートします。
com.octo.captcha.component.image.textpaster.TextPaster をインポートします。
com.octo.captcha.component.image.textpaster.textdecorator.TextDecorator をインポートします。
com.octo.captcha.component.image.wordtoimage.CompedWordToImage をインポートします。
com.octo.captcha.component.image.wordtoimage.WordToImage をインポートします。
com.octo.captcha.component.word.wordgenerator.RandomWordGenerator をインポートします。
com.octo.captcha.component.word.wordgenerator.WordGenerator をインポートします。
com.octo.captcha.engine.image.ListImageCaptchaEngine をインポートします。
com.octo.captcha.image.gimpy.GimpyFactory をインポートします。
/**
* 验证コード画像の生成
*/
public class JCaptchaEngine extends ListImageCaptchaEngine {
public static Final String IMAGE_CAPTCHA_KEY = "imageCaptcha";// ImageCaptcha オブジェクトがセッション中に存在するキー
public static Final String CAPTCHA_INPUT_NAME = "j_captcha";// 验证码输入表单名
public static Final String CAPTCHA_IMAGE_URL = "/captcha.jpg";// 验证码图片URL
private static Final Integer MIN_WORD_LENGTH = 4;// 验证码最小長さ
private static Final Integer MAX_WORD_LENGTH = 4;// 验证码最大長さ
private static Final Integer IMAGE_HEIGHT = 28;// 验证码图片の高さ
private static Final Integer IMAGE_WIDTH = 80;// 验证码图片宽度
private static Final Integer MIN_FONT_SIZE = 16;// 验证码最小文字体
private static Final Integer MAX_FONT_SIZE = 16;// 验证码最大文字体
private static Final String RANDOM_WORD = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";// 随机文字
private static Final String IMAGE_PATH = "./captcha/";// 随机背景图片路径
// 验证码随机字体
プライベート静的最終フォント[] RANDOM_FONT = 新しいフォント[] {
new Font("nyala", Font.BOLD, MIN_FONT_SIZE),
新しいフォント("Arial", Font.BOLD, MIN_FONT_SIZE),
新しいフォント("ベル MT", Font.BOLD, MIN_FONT_SIZE),
new Font("Credit valley", Font.BOLD, MIN_FONT_SIZE),
新しいフォント("インパクト", Font.BOLD, MIN_FONT_SIZE)
};
// 验证码随机颜色
プライベート静的最終カラー[] RANDOM_COLOR = 新しいカラー[] {
新しいカラー(255, 255, 255)、
新色(255, 220, 220)、
新色(220, 255, 255)、
新色(220、220、255)、
新色(255, 255, 220)、
新色(220、255、220)
};
// 验证コードの生成
@オーバーライド
protected void buildInitialFactories() {
RandomListColorGenerator randomListColorGenerator = 新しい RandomListColorGenerator(RANDOM_COLOR);
BackgroundGeneratorbackgroundGenerator = new FileReaderRandomBackgroundGenerator(IMAGE_WIDTH, IMAGE_HEIGHT, IMAGE_PATH);
WordGenerator wordGenerator = new RandomWordGenerator(RANDOM_WORD);
FontGenerator fontGenerator = new RandomFontGenerator(MIN_FONT_SIZE, MAX_FONT_SIZE, RANDOM_FONT);
TextDecorator[] textDecorator = 新しい TextDecorator[] {};
TextPaster textPaster = new DecoratedRandomTextPaster(MIN_WORD_LENGTH、MAX_WORD_LENGTH、randomListColorGenerator、textDecorator);
WordToImage wordToImage = new CompusedWordToImage(fontGenerator, backgroundGenerator, textPaster);
addFactory(new GimpyFactory(wordGenerator, wordToImage));
}
}
复制番号代番号次のように:
パッケージ com.g.core.common.JCaptcha;
com.octo.captcha.service.captchastore.FastHashMapCaptchaStore をインポートします。
com.octo.captcha.service.image.DefaultManageableImageCaptchaService をインポートします。
com.octo.captcha.service.image.ImageCaptchaService をインポートします。
パブリック クラス CaptchaServiceSingleton {
プライベート静的 ImageCaptchaService インスタンス =null;
public CaptchaServiceSingleton() {
}
// synchronized关键字解决線程不安全を使用します
public synchronized static ImageCaptchaService getInstance() {
if (インスタンス == null) {
インスタンス = new DefaultManageableImageCaptchaService(new FastHashMapCaptchaStore(), new JCaptchaEngine(), 180,
100000、75000);
}
インスタンスを返します。
}
}
复制番号代番号次のように:
パッケージ com.g.core.render;
インポート java.awt.image.BufferedImage;
インポート java.io.IOException;
インポートjavax.imageio.ImageIO;
インポート javax.servlet.ServletOutputStream;
com.g.core.common.JCaptcha.CaptchaServiceSingleton をインポートします。
com.jfinal.kit.StringKitをインポートします。
com.jfinal.render.Renderをインポートします。
public class JCaptchaRender extends Render {
プライベート文字列ランダムコードキー;
public JCaptchaRender(String randomCodeKey) {
if (StringKit.isBlank(randomCodeKey))
throw new IllegalArgumentException("randomCodeKey を空白にすることはできません");
this.randomCodeKey = ランダムコードキー;
}
@オーバーライド
public void render() {
response.setHeader("キャッシュ制御", "ストアなし");
response.setHeader("プラグマ", "キャッシュなし");
response.setDateHeader("有効期限", 0);
response.setContentType("画像/jpeg");
ServletOutputStream sos = null;
試す {
sos = 応答.getOutputStream();
//文字列 captchaId = request.getSession(true).getId();
BufferedImage チャレンジ = (BufferedImage) CaptchaServiceSingleton.getInstance().getChallengeForID(randomCodeKey, request.getLocale());
ImageIO.write(challenge, "jpg", sos);
sos.flush();
} catch (例外 e) {
新しい RuntimeException(e) をスローします。
}
ついに {
if (sos != null)
try {sos.close();} catch (IOException e) {e.printStackTrace();}
}
}
}
复制番号代番号次のように:
public void random_code() {
render(new JCaptchaRender(getSession().getId()));
}