复制代码代码如下:
แพ็คเกจ com.g.core.common.JCaptcha;
นำเข้า java.awt.Color;
นำเข้า java.awt.Font;
นำเข้า com.octo.captcha.component.image.พื้นหลังgenerator.BackgroundGenerator;
นำเข้า com.octo.captcha.component.image.พื้นหลังgenerator.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.ComposedWordToImage;
นำเข้า 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;
-
* 生成验证码image
-
JCaptchaEngine คลาสสาธารณะขยาย ListImageCaptchaEngine {
สตริงสุดท้ายแบบคงที่สาธารณะ IMAGE_CAPTCHA_KEY = "imageCaptcha";// ImageCaptcha对象存放在Session中的key
สตริงสุดท้ายแบบคงที่สาธารณะ CAPTCHA_INPUT_NAME = "j_captcha";// 验证码输入表单名称
สตริงสุดท้ายแบบคงที่สาธารณะ CAPTCHA_IMAGE_URL = "/captcha.jpg";// 验证码imageURL
จำนวนเต็มคงที่ส่วนตัวสุดท้าย MIN_WORD_LENGTH = 4;// 验证码最小长度
จำนวนเต็มคงที่ส่วนตัวสุดท้าย MAX_WORD_LENGTH = 4;// 验证码最大长度
ส่วนตัวจำนวนเต็มสุดท้ายคงที่ IMAGE_HEIGHT = 28;//
ส่วนตัวจำนวนเต็มสุดท้ายคงที่ IMAGE_WIDTH = 80;//
ส่วนตัวจำนวนเต็มสุดท้ายคงที่ MIN_FONT_SIZE = 16;// 验证码最字体
จำนวนเต็มคงที่ส่วนตัวสุดท้าย MAX_FONT_SIZE = 16;// 验证码最大字体
สตริงสุดท้ายแบบคงที่ส่วนตัว RANDOM_WORD = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//
สตริงสุดท้ายแบบคงที่ส่วนตัว IMAGE_PATH = "./captcha/";// 随机背景上随路径
// 验证码随机字体
แบบอักษรสุดท้ายคงที่ส่วนตัว [] RANDOM_FONT = แบบอักษรใหม่ [] {
แบบอักษรใหม่ ("nyala", Font.BOLD, MIN_FONT_SIZE),
แบบอักษรใหม่ ("Arial", Font.BOLD, MIN_FONT_SIZE),
แบบอักษรใหม่ ("Bell MT", Font.BOLD, MIN_FONT_SIZE),
แบบอักษรใหม่ ("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)
-
// 生成验证码
@แทนที่
โมฆะที่ได้รับการป้องกัน buildInitialFactories () {
RandomListColorGenerator RandomListColorGenerator = 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 สาธารณะ () {
-
// 使用ซิงโครไนซ์关键字解决线程不安全
ImageCaptchaService getInstance () สาธารณะที่ซิงโครไนซ์สาธารณะ {
ถ้า (อินสแตนซ์ == null) {
อินสแตนซ์ = ใหม่ 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;
JCaptchaRender สาธารณะ (สตริง RandomCodeKey) {
ถ้า (StringKit.isBlank(randomCodeKey))
โยน IllegalArgumentException ใหม่ ("randomCodeKey ไม่สามารถเว้นว่างได้");
this.randomCodeKey = RandomCodeKey;
-
@แทนที่
โมฆะสาธารณะเรนเดอร์ () {
response.setHeader("ควบคุมแคช", "ไม่มีร้านค้า");
response.setHeader("Pragma", "ไม่มีแคช");
response.setDateHeader("หมดอายุ", 0);
response.setContentType("รูปภาพ/jpeg");
ServletOutputStream sos = null;
พยายาม {
sos = response.getOutputStream();
//String captchaId = request.getSession(true).getId();
ความท้าทายของ BufferedImage = (BufferedImage) CaptchaServiceSingleton.getInstance().getChallengeForID(randomCodeKey, request.getLocale());
ImageIO.write (ความท้าทาย "jpg", sos);
sos.ฟลัช();
} จับ (ข้อยกเว้นจ) {
โยน RuntimeException ใหม่ (e);
-
ในที่สุด {
ถ้า (sos != null)
ลอง {sos.close();} catch (IOException e) {e.printStackTrace();}
-
-
-
复制代码代码如下:
โมฆะสาธารณะ Random_code () {
แสดงผล (JCaptchaRender ใหม่ (getSession().getId()));
-