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

(0)

相关推荐

  • 解析Java实现随机验证码功能的方法详解

    现在许多系统的注册.登录或者发布信息模块都添加的随机码功能,就是为了避免自动注册程序或者自动发布程序的使用.验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交信息无效.为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加难度.    我们可以使用servlet来实现随机验证码的实现. 复制代码 代码如下: package com.servlet; 

  • java实现验证码类生成中文验证码

    复制代码 代码如下: package xwcms.net.service;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;im

  • Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例

    代码如下所示: 复制代码 代码如下: package com.hoo.util; import java.awt.Color;  import java.awt.Font;  import java.awt.Graphics;  import java.awt.image.BufferedImage;  import java.util.Random; import javax.imageio.ImageIO;  import javax.servlet.http.HttpServletRequ

  • 浅析Java验证码生成库JCaptcha

    JCaptcha是非常强大的,不光是可以生成图片式的验证码,还可以生成声音式的(新浪就使用了双重验证码).本文简单的介绍了JCaptcha库以及使用实例,下面一起来看看. 下载JCaptcha库 maven依赖如此添加: <dependency> <groupId>com.octo.captcha</groupId> <artifactId>jcaptcha</artifactId> <version>1.0</version&

  • Java随机生成手机短信验证码的方法

    本文实例讲述了Java随机生成手机短信验证码的方法.分享给大家供大家参考,具体如下: /** * 创建指定数量的随机字符串 * @param numberFlag 是否是数字 * @param length * @return */ public static String createRandom(boolean numberFlag, int length){ String retStr = ""; String strTable = numberFlag ? "1234

  • java登录验证码实现代码

    VerifyCodeServlet.java类: 复制代码 代码如下: package com.spring.controller;import java.awt.Color;         import java.awt.Font;         import java.awt.Graphics2D;         import java.awt.image.BufferedImage;         import java.util.Random;         import ja

  • java 图片验证码的实现代码

    复制代码 代码如下: makeCertPic.java package pic; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.imagei

  • java生成图片验证码示例程序

    复制代码 代码如下: <%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">&l

  • Java实现验证码具体代码

    这里实现我使用到了struts2模拟一个登录功能来验证java实现的验证码功能. Java实现验证码的步骤: 1.创建RandomImageGenerator.java类,该类实现验证码图片的生成 2.创建一个servlet类,RandomImageServlet.java,将生成的验证码输出到页面 3.创建一个Action类,LoginAction.java,控制登录 4.配置struts.xml一个web.xml文件 5.编写页面 具体实现用代码表达 1.创建RandomImageGener

  • 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.FileReaderRandomBac

  • Yii2简单实现给表单添加验证码的方法

    本文实例讲述了Yii2简单实现给表单添加验证码的方法.分享给大家供大家参考,具体如下: 控制器SiteController: class SiteController extends Controller { // ... public function actions() { return [ // ... 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'fixedVerifyCode' => YII_ENV_TEST ?

  • 使用开源工具制作网页验证码的方法

    开发工具:eclipse.kaptcha-2.3.jar包. 一.创建Web项目: 二.新建一个Jsp页面(内容有,一个文本框,一个图片容器,一个提交按钮) <body> <img alt="random" src="randomcode.jpg" onclick="changeR(this)" style="cursor: pointer;"> <form action="check.

  • iOS本地动态生成验证码的方法

    前几天app注册被人攻击了,从网上找了这个先保存下.... 用于ios本地动态生成验证码,效果如下: 导入CoreGraphics.framework 用于绘制图形 封装UIView,便捷使用,代码如下: AuthcodeView.h #import <UIKit/UIKit.h> @interface AuthcodeView : UIView @property (strong, nonatomic) NSArray *dataArray;//字符素材数组 @property (stron

  • asp.net简单生成验证码的方法

    本文实例讲述了asp.net简单生成验证码的方法.分享给大家供大家参考,具体如下: 1.新建一个一般处理程序 namespace WebApplication1 { /// <summary> /// $codebehindclassname$ 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfil

  • php中文验证码实现方法

    本文实例讲述了php中文验证码实现方法.分享给大家供大家参考.具体分析如下: 先看如下效果图: 具体代码如下: <?php /********************************* * Code by Gently * 24/07/07 *严正声明:验证码为程序随机生成,"某种巧合"的词语组合属于正常现象 , *某些别有用心的人不要借题发挥! *Power by ZendStudio.Net *********************************/ ses

  • php生成图片验证码的方法

    本文为大家分享了php生成图片验证码的方法,供大家参考,具体内容如下 首先从指定字符集合中随机抽取固定数目的字符,以一种不规则的方法画在画布上,再适当添加一些干扰点和干扰元素,最后将图片输出,一张崭新的验证码就完成了. 前端代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"&

  • asp.net登录验证码实现方法

    前端添加的标签和方法: 验证码: 复制代码 代码如下: <input id="txtVerifyCode" type="text" maxlength="5" style="line-height: 30px;  height: 30px; width: 80px;border:solid 1px #d4d4d4;" class="input"/>&nbsp<img src=&qu

  • ThinkPHP3.2.1图片验证码实现方法

    本文实例讲述了ThinkPHP3.2.1图片验证码实现方法.分享给大家供大家参考,具体如下: 今天用到图片验证码的功能,在网上找到ThinkPHP的以下代码: Public function verify(){ import('think.Image'); Image::buildImageVerify(); } 添加到Controller中,通过地址"http://localhost/index.php/passport/index/verify"来访问,却提示以下错误: Class

  • PHP 图像处理与SESSION制作超简单验证码的方法示例

    本文实例讲述了PHP 图像处理与SESSION制作超简单验证码的方法.分享给大家供大家参考,具体如下: 验证码的实现 首先我们要清楚,无论是做什么东西,在做之前一定要有思路,譬如这个验证码里他有些什么,为了实现它我们该做些什么,怎么样去做. 这里我例举出几个点. 1.验证码肯定要有内容. 2.验证码里肯定要有干扰信息,就譬如,线条干扰和点点干扰. 那么为了实现他们我们该如何做呢? 第一步,创建一个名为captcha.php的文件 在里面输入 <?php session_start();//开启会

随机推荐