一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - jfinal添加jcaptcha驗證碼實現方法

jfinal添加jcaptcha驗證碼實現方法

2019-10-30 17:02java技術網 JAVA教程

這篇文章主要介紹了jfinal的jcaptcha驗證碼實現方法,大家參考使用吧

代碼如下:


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()));
 }

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美人妖大啪啪 | 日本成日本片人免费 | 四虎在线最新永久免费 | 国产成人综合精品一区 | 我的青梅竹马是消防员2季未增删免费 | 波多洁野衣一二区三区 | 日本四虎影院 | 国产精品一级视频 | 天天操天天射天天色 | 男人看的网址 | 黄色大片三级 | 超h高h肉h文武侠 | 亚洲 欧美 中文 日韩 另类 | 欧美香蕉视频 | 手机在线观看网站免费视频 | 亚欧日韩 | 99九九国产精品免费视频 | 精品午夜寂寞黄网站在线 | 四虎精品免费国产成人 | 日韩一级片在线免费观看 | 日本大片在线 | 免费看视频的 | 狠狠综合久久综合网站 | 日韩免费观看 | 韩国理论片最新第一页 | 深夜免费看 | pregnanthd产子 | 亚洲va久久久久 | 边摸边操 | 日韩精品欧美激情国产一区 | 四虎最新免费网址 | 亚洲成色| 日本欧美不卡一区二区三区在线 | 国产激情一区二区三区成人91 | 黑人干亚洲人 | 毛片视频网站在线观看 | 亚洲AV久久久噜噜噜久久 | 国产福利不卡 | 午夜宅男影院 | 手机看片国产自拍 | 强行扒开美女大腿挺进 |