复制代码代码如下:
пакет com.g.core.common.JCaptcha;
импортировать java.awt.Color;
импортировать java.awt.Font;
импортировать com.octo.captcha.comComponent.image.backgroundgenerator.BackgroundGenerator;
импортировать com.octo.captcha.comComponent.image.backgroundgenerator.FileReaderRandomBackgroundGenerator;
импортировать com.octo.captcha.comComponent.image.color.RandomListColorGenerator;
импортировать com.octo.captcha.comComponent.image.fontgenerator.FontGenerator;
импортировать com.octo.captcha.comComponent.image.fontgenerator.RandomFontGenerator;
импортировать com.octo.captcha.comComponent.image.textpaster.DecoratedRandomTextPaster;
импортировать com.octo.captcha.comComponent.image.textpaster.TextPaster;
импортировать com.octo.captcha.comComponent.image.textpaster.textdecorator.TextDecorator;
импортировать com.octo.captcha.comComponent.image.wordtoimage.ComposeWordToImage;
импортировать com.octo.captcha.comComponent.image.wordtoimage.WordToImage;
импортировать com.octo.captcha.comComponent.word.wordgenerator.RandomWordGenerator;
импортировать com.octo.captcha.comComponent.word.wordgenerator.WordGenerator;
импортировать com.octo.captcha.engine.image.ListImageCaptchaEngine;
импортировать com.octo.captcha.image.gimpy.GimpyFactory;
/**
* китайское фото фото
*/
публичный класс JCaptchaEngine расширяет ListImageCaptchaEngine {
public static Final String IMAGE_CAPTCHA_KEY = "imageCaptcha";// ImageCaptcha对象存放在Session中的key
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 = новый шрифт [] {
новый шрифт("ньяла", Font.BOLD, MIN_FONT_SIZE),
новый шрифт("Arial", Font.BOLD, MIN_FONT_SIZE),
новый шрифт("Bell MT", Font.BOLD, MIN_FONT_SIZE),
новый шрифт("Кредитная долина", 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)
};
// 生成验证码
@Override
защищенный недействительный buildInitialFactories() {
RandomListColorGeneratorrandomListColorGenerator = новый RandomListColorGenerator(RANDOM_COLOR);
BackgroundGenerator backgroundGenerator = новый FileReaderRandomBackgroundGenerator (IMAGE_WIDTH, IMAGE_HEIGHT, IMAGE_PATH);
WordGenerator wordGenerator = новый RandomWordGenerator (RANDOM_WORD);
FontGenerator FontGenerator = новый RandomFontGenerator (MIN_FONT_SIZE, MAX_FONT_SIZE, RANDOM_FONT);
TextDecorator [] textDecorator = новый TextDecorator [] {};
TextPaster textPaster = новый DecoratedRandomTextPaster (MIN_WORD_LENGTH, MAX_WORD_LENGTH, randomListColorGenerator, textDecorator);
WordToImage wordToImage = новый ComposedWordToImage (fontGenerator, backgroundGenerator, textPaster);
addFactory (новый 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;
общественный CaptchaServiceSingleton () {
}
// 使用synchronized关键字解决线程不安全
общедоступный синхронизированный статический ImageCaptchaService getInstance() {
если (экземпляр == ноль) {
экземпляр = новый DefaultManageableImageCaptchaService (новый FastHashMapCaptchaStore(), новый 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;
публичный класс JCaptchaRender расширяет Render {
частная строка randomCodeKey;
public JCaptchaRender (String randomCodeKey) {
если (StringKit.isBlank(randomCodeKey))
throw new IllegalArgumentException("randomCodeKey не может быть пустым");
this.randomCodeKey = случайныйCodeKey;
}
@Override
публичный недействительный рендер() {
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "без кэша");
response.setDateHeader("Срок действия истекает", 0);
response.setContentType("изображение/jpeg");
ServletOutputStream SOS = NULL;
пытаться {
sos = response.getOutputStream();
//Строка captchaId = request.getSession(true).getId();
Задача BufferedImage = (BufferedImage) CaptchaServiceSingleton.getInstance().getChallengeForID(randomCodeKey, request.getLocale());
ImageIO.write(вызов, "jpg", sos);
сос.флеш();
} catch (Исключение е) {
выдать новое RuntimeException(e);
}
окончательно {
если (sos != ноль)
попробуйте {sos.close();} catch (IOException e) {e.printStackTrace();}
}
}
}
复制代码代码如下:
общественный недействительный случайный_код () {
render(new JCaptchaRender(getSession().getId()));
}