亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

jfinal添加jcaptcha驗證碼實現方法

2019-11-26 15:47:37
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

package com.g.core.common.JCaptcha;

import java.awt.Color;
import java.awt.Font;

import com.octo.captcha.component.image.backgroundgenerator.BackgroundGenerator;
import com.octo.captcha.component.image.backgroundgenerator.FileReaderRandomBackgroundGenerator;
import com.octo.captcha.component.image.color.RandomListColorGenerator;
import com.octo.captcha.component.image.fontgenerator.FontGenerator;
import com.octo.captcha.component.image.fontgenerator.RandomFontGenerator;
import com.octo.captcha.component.image.textpaster.DecoratedRandomTextPaster;
import com.octo.captcha.component.image.textpaster.TextPaster;
import com.octo.captcha.component.image.textpaster.textdecorator.TextDecorator;
import com.octo.captcha.component.image.wordtoimage.ComposedWordToImage;
import com.octo.captcha.component.image.wordtoimage.WordToImage;
import com.octo.captcha.component.word.wordgenerator.RandomWordGenerator;
import com.octo.captcha.component.word.wordgenerator.WordGenerator;
import com.octo.captcha.engine.image.ListImageCaptchaEngine;
import com.octo.captcha.image.gimpy.GimpyFactory;

/**
 * 生成驗證碼圖片
 */

public class JCaptchaEngine extends 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/";// 隨機背景圖片路徑

 // 驗證碼隨機字體
 private static final Font[] RANDOM_FONT = new Font[] {
   new Font("nyala", Font.BOLD, MIN_FONT_SIZE),
   new Font("Arial", Font.BOLD, MIN_FONT_SIZE),
   new Font("Bell MT", Font.BOLD, MIN_FONT_SIZE),
   new Font("Credit valley", Font.BOLD, MIN_FONT_SIZE),
   new Font("Impact", Font.BOLD, MIN_FONT_SIZE)
 };

 // 驗證碼隨機顏色
 private static final Color[] RANDOM_COLOR = new Color[] {
   new Color(255, 255, 255),
   new Color(255, 220, 220),
   new Color(220, 255, 255),
   new Color(220, 220, 255),
   new Color(255, 255, 220),
   new Color(220, 255, 220)
 };

 // 生成驗證碼
 @Override
 protected void buildInitialFactories() {

  RandomListColorGenerator randomListColorGenerator = new RandomListColorGenerator(RANDOM_COLOR);

  BackgroundGenerator backgroundGenerator = 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 = 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));
 }

}

復制代碼 代碼如下:

package com.g.core.common.JCaptcha;

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

public class CaptchaServiceSingleton {

 private static  ImageCaptchaService  instance =null;

 public CaptchaServiceSingleton() {
 }

 // 使用synchronized關鍵字解決線程不安全
 public synchronized static ImageCaptchaService getInstance() {
  if (instance == null) {
   instance = new DefaultManageableImageCaptchaService(new FastHashMapCaptchaStore(), new JCaptchaEngine(), 180, 
                 100000 , 75000);
  }
  return instance;
 }

}

復制代碼 代碼如下:

package com.g.core.render;

import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;

import com.g.core.common.JCaptcha.CaptchaServiceSingleton;
import com.jfinal.kit.StringKit;
import com.jfinal.render.Render;

public class JCaptchaRender extends Render {

 private String randomCodeKey;
 public JCaptchaRender(String randomCodeKey) {
  if (StringKit.isBlank(randomCodeKey))
   throw new IllegalArgumentException("randomCodeKey can not be blank");
  this.randomCodeKey = randomCodeKey;
 }
 @Override
 public void render() {
  response.setHeader("Cache-Control", "no-store");
  response.setHeader("Pragma", "no-cache");
  response.setDateHeader("Expires", 0);
  response.setContentType("image/jpeg");
  ServletOutputStream sos = null;
  try {
   sos = response.getOutputStream();
//   String captchaId = request.getSession(true).getId();
   BufferedImage challenge = (BufferedImage) CaptchaServiceSingleton.getInstance().getChallengeForID(randomCodeKey, request.getLocale());
   ImageIO.write(challenge, "jpg", sos);
   sos.flush();
  } catch (Exception e) {
   throw new RuntimeException(e);
  }
  finally {
   if (sos != null)
    try {sos.close();} catch (IOException e) {e.printStackTrace();}
  }
 }

}

復制代碼 代碼如下:

public void random_code() {
     render(new JCaptchaRender(getSession().getId()));
 }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人免费网视频| 高清欧美性猛交xxxx黑人猛交| 亚洲免费伊人电影在线观看av| 日韩美女在线看| 亚洲精品v天堂中文字幕| 欧美性感美女h网站在线观看免费| 亚洲精品国产福利| 中文字幕亚洲色图| 色综合视频一区中文字幕| 九九热在线精品视频| 2018中文字幕一区二区三区| 97精品一区二区三区| 中文字幕一区二区三区电影| 91精品国产高清久久久久久| 亚洲欧美中文字幕在线一区| 久久久久久国产精品三级玉女聊斋| 国产精品96久久久久久又黄又硬| 欧美视频专区一二在线观看| 欧美xxxx14xxxxx性爽| 国产伦精品一区二区三区精品视频| 欧美午夜视频一区二区| 国产精品一二区| 国产精品毛片a∨一区二区三区|国| 亚洲专区国产精品| 另类专区欧美制服同性| 国产欧美一区二区三区在线| 宅男66日本亚洲欧美视频| 欧美成人国产va精品日本一级| 色综合天天综合网国产成人网| 久久久国产精品免费| 人人澡人人澡人人看欧美| 欧美性极品xxxx做受| 2019亚洲男人天堂| 国产成人精品电影久久久| 日日骚av一区| 亚洲欧美日韩另类| 亚洲一区999| 亚洲最新av在线| 欧美日韩国产精品一区二区不卡中文| 亚洲午夜未删减在线观看| 久久久女人电视剧免费播放下载| 疯狂蹂躏欧美一区二区精品| 国产美女久久久| 黑人巨大精品欧美一区二区| 欧美乱大交做爰xxxⅹ性3| 久久夜精品香蕉| 亚洲人成电影在线| 国产精品亚洲视频在线观看| 精品国产999| 亚洲精选一区二区| 亚洲国产免费av| 日韩在线欧美在线国产在线| 国产精品丝袜一区二区三区| 一区二区三区视频免费| 日韩中文字幕网址| 亚洲一区二区久久| 日韩在线欧美在线国产在线| 国产91精品久久久久久久| 日韩毛片在线看| 国产精品网站入口| 日韩视频在线一区| 国产精品国产三级国产aⅴ浪潮| 亚洲三级黄色在线观看| 国内精品小视频| 色综合久久88色综合天天看泰| 最近2019中文字幕在线高清| 久久久人成影片一区二区三区| 97精品欧美一区二区三区| 亚洲一区二区中文字幕| www.久久草.com| 亚洲欧美国产va在线影院| 亚洲精品www久久久| 伊人久久免费视频| 青草青草久热精品视频在线网站| 欧美成人中文字幕在线| 欧美成人免费va影院高清| 九九热这里只有精品6| 欧美大片在线看免费观看| 国产精品永久免费在线| 最近2019中文字幕第三页视频| 97国产真实伦对白精彩视频8| 人人爽久久涩噜噜噜网站| 国产亚洲精品久久久久动| 国产一区二区三区三区在线观看| 日韩在线观看视频免费| 91禁外国网站| 成人免费淫片视频软件| 欧美国产日韩一区二区在线观看| 国产日韩换脸av一区在线观看| 91精品久久久久| 日本中文字幕不卡免费| 高清一区二区三区日本久| 久久久噜噜噜久久| 亚洲成人av在线播放| 国产91ⅴ在线精品免费观看| 亚洲国产精彩中文乱码av| 亚洲加勒比久久88色综合| 欧美亚洲国产精品| 久久这里有精品视频| 欧美日韩精品国产| 亚洲一区二区三区乱码aⅴ蜜桃女| 91精品在线国产| 欧美肥老太性生活视频| 日本午夜在线亚洲.国产| 国产亚洲欧洲黄色| 亚洲理论在线a中文字幕| 日韩av免费在线看| 久久久久久久一区二区三区| 亚洲欧美日韩图片| 中文字幕欧美国内| 国产精品久久久久久婷婷天堂| 亚洲电影第1页| 成人欧美一区二区三区黑人| 在线播放国产精品| 久久激情视频久久| 国产美女久久精品香蕉69| 久久综合九色九九| 久久久精品电影| 欧美大片在线看| 国产精品视频男人的天堂| 欧美日韩免费观看中文| 国产伦精品免费视频| 成人黄色av播放免费| 亚洲自拍高清视频网站| 亚洲人午夜色婷婷| 久久综合伊人77777尤物| 美日韩精品免费观看视频| 午夜精品久久久久久99热| 国产一区红桃视频| 欧美超级免费视 在线| 国产精品久久久久久中文字| 国产精品日韩一区| 午夜精品在线观看| 亚洲成人1234| 中文字幕最新精品| 狠狠色狠狠色综合日日五| 宅男66日本亚洲欧美视频| 91av在线不卡| 欧美精品videos| 1769国内精品视频在线播放| 国产成人精彩在线视频九色| 国产欧美日韩高清| 欧美激情视频在线免费观看 欧美视频免费一| 日韩在线观看精品| 国产精品老牛影院在线观看| 91国偷自产一区二区三区的观看方式| 日韩欧美国产激情| 91成人免费观看网站| 久久青草精品视频免费观看| 国产视频亚洲视频| 欧美日韩第一视频| 黑人巨大精品欧美一区二区| 亚洲自拍偷拍福利| 日韩在线免费观看视频| 欧美日韩另类字幕中文| 国产综合在线看| 51久久精品夜色国产麻豆| 亚洲国产精品资源| 久久久久亚洲精品国产| 97成人精品视频在线观看| 国产精品免费在线免费| 亚洲午夜小视频| 色琪琪综合男人的天堂aⅴ视频| 日韩成人在线视频|