源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

jfinal添加jcaptcha验证码实现方法

  • 时间:2021-11-19 16:02 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:jfinal添加jcaptcha验证码实现方法
[u]复制代码[/u] 代码如下:
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));  } }
[u]复制代码[/u] 代码如下:
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;  } }
[u]复制代码[/u] 代码如下:
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();}   }  } }
[u]复制代码[/u] 代码如下:
public void random_code() {      render(new JCaptchaRender(getSession().getId()));  }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部