`
zzc1684
  • 浏览: 1233182 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

jcaptcha 自定义验证码例子

阅读更多
jar包:

commons-collections.jar

commons-logging.jar

jcaptcha-1.0-all.jar

public class MyImageSingleton {

private static ImageCaptchaService instance =new DefaultManageableImageCaptchaService();

static {
     instance = new DefaultManageableImageCaptchaService(
        new FastHashMapCaptchaStore(),
        new MyImageCaptchaEngine(),
        180,
        100000,
        75000);
     } 

public static ImageCaptchaService getMyInstance(){
   return instance;
}
}

========================

public class MyImageCaptchaEngine extends ListImageCaptchaEngine {

// 随机生成的字符组成
    private static final String RANDOM_WORD_GENERATOR = "0123456789";

    // 验证码图片上显示的字符个数
    private static final int TEXT_SIZE = 4;
    
    //验证码图片上显示的字符的大小设置
    private static final int TEXT_WIDTH = 12;
    private static final int TEXT_HEIGHT = 13;

    // 验证码图片的大小设置
    private static final int IMAGE_CAPTCHA_WIDTH = 50;
    private static final int IMAGE_CAPTCHA_HEIGHT = 20;

//    protected void buildInitialFactories() {
//        // 随机生成的字符
//        WordGenerator wgen = new RandomWordGenerator(RANDOM_WORD_GENERATOR);
//        RandomRangeColorGenerator cgen = new RandomRangeColorGenerator(
//                new int[]{ 0, 100 }, new int[]{ 0, 100 }, new int[]{ 0, 100 });
//        // 文字显示的个数
//        TextPaster textPaster = new RandomTextPaster(new Integer(TEXT_SIZE),
//                new Integer(TEXT_SIZE), cgen, Boolean.TRUE);
//        // 图片的大小
//        BackgroundGenerator backgroundGenerator = new FunkyBackgroundGenerator(
//                new Integer(IMAGE_CAPTCHA_WIDTH), new Integer(
//                        IMAGE_CAPTCHA_HEIGHT));
//        // 字体格式
//        Font[] fontsList = new Font[]{ new Font("Arial", 0, 12),
//                new Font("Tahoma", 0, 12), new Font("Verdana", 0, 12), };
//        // 文字的大小
//        FontGenerator fontGenerator = new RandomFontGenerator(new Integer(
//                TEXT_WIDTH), new Integer(TEXT_HEIGHT), fontsList);
//
//        WordToImage wordToImage = new ComposedWordToImage(fontGenerator,
//                backgroundGenerator, textPaster);
//        this.addFactory(new GimpyFactory(wgen, wordToImage));
//    }
    
    protected void buildInitialFactories() {
        WordGenerator wgen = new RandomWordGenerator("abcdefghijklmnopquvwxyz123456789");
        RandomRangeColorGenerator cgen = new RandomRangeColorGenerator(
             new int[] {0, 100},
             new int[] {0, 100},
             new int[] {0, 100});
        //文字显示4个数
        TextPaster textPaster = new RandomTextPaster(new Integer(4), new Integer(4), cgen, true);
        //图片的大小
        BackgroundGenerator backgroundGenerator = new FunkyBackgroundGenerator(new Integer(200), new Integer(45));

        Font[] fontsList = new Font[] {
            new Font("Arial", 0, 10),
            new Font("Tahoma", 0, 10),
            new Font("Verdana", 0, 10),
         };
     
        FontGenerator fontGenerator = new RandomFontGenerator(new Integer(20), new Integer(30), fontsList);

         WordToImage wordToImage = new ComposedWordToImage(fontGenerator, backgroundGenerator, textPaster);
         this.addFactory(new GimpyFactory(wgen, wordToImage));
}

==================================

public class MyImageServlet extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

   byte[] captchaChallengeAsJpeg = null;
        // the output stream to render the captcha image as jpeg into
        ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
        try {
            // get the session id that will identify the generated captcha.
            //the same id must be used to validate the response, the session id is a good candidate!
            String captchaId = request.getSession().getId();
            // call the ImageCaptchaService getChallenge method
            BufferedImage challenge =
                    MyImageSingleton.getMyInstance().getImageChallengeForID(captchaId,
                       request.getLocale());
            // a jpeg encoder
            JPEGImageEncoder jpegEncoder =
                    JPEGCodec.createJPEGEncoder(jpegOutputStream);
            jpegEncoder.encode(challenge);
        } catch (IllegalArgumentException e) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        } catch (CaptchaServiceException e) {
        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            return;
        }
        captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
        // flush it in the response
        response.setHeader("Cache-Control", "no-store");
        response.setHeader("Pragma", "no-cache");
        response.setDateHeader("Expires", 0);
        //输出JPEG
        response.setContentType("image/jpeg");
        ServletOutputStream responseOutputStream =
        response.getOutputStream();
        responseOutputStream.write(captchaChallengeAsJpeg);
        responseOutputStream.flush();
        responseOutputStream.close();
}

===========================

web xml
<servlet>
    <servlet-name>MyImageServlet</servlet-name>
    <servlet-class>com.lch.test.checkimg.MyImageServlet</servlet-class>
</servlet>
<servlet>
    <servlet-name>MyCheckImg</servlet-name>
    <servlet-class>com.lch.test.checkimg.MyCheckImg</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MyImageServlet</servlet-name>
    <url-pattern>/MyImageServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>MyCheckImg</servlet-name>
    <url-pattern>/MyCheckImg</url-pattern>
</servlet-mapping>

========================jsp页面

<center>
       <form action="MyCheckImg" method="post"> 
        <img src="MyImageServlet" mce_src="MyImageServlet" /> <input type="text" name="myword" value="" /> 
         <input type="submit"/> 
   </form> 
   <center>

======================提交页面验证Servlet

public class MyCheckImg extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   try{
   String sessionID=request.getSession().getId();
   System.out.println(sessionID);
   String myword=request.getParameter("myword");
   System.out.println(myword);

   PrintWriter pw= response.getWriter();
   StringBuffer sb=new StringBuffer();
   ///check
   boolean flg=CaptchaServiceSingleton.getInstance().validateResponseForID(sessionID, myword);
   if(flg){
    sb.append("<font color='red'>check success!</font>");
    System.out.println("验证成功!");
   }else{
    sb.append("<font color='red'>check lose!</font>");
    System.out.println("验证失败!");
   }
   pw.print(sb.toString());
   pw.close();
   }catch(Exception e){
    System.out.println();
   }
}

 

分享到:
评论

相关推荐

    jcaptcha的验证码例子

    在IT领域,`jCaptcha`(Just Another CAPTCHA)是一个非常流行的Java实现的验证码库,它提供了高度可定制的图像和音频验证码生成器。本文将详细介绍`jCaptcha`在基于`Acegi`安全框架的应用中的使用,以及如何设置一...

    jcaptcha生成验证码demo

    在JSP下,用jcaptcha生成彩色验证码的案例。 主页http://jcaptcha.sourceforge.net/ 网上有很多例子,但有一点没说清楚,这个项目的jar包需要两个apache的项目包,一个是collections,还有一个是logging。 我做了...

    java通过JCaptcha生成验证码

    首先,JCaptcha 是一个开源的 Java 验证码库,它提供了丰富的定制选项,包括自定义干扰线和背景图片,以增加验证码的复杂性,从而降低被机器识别的可能性。以下是一些关键知识点: 1. **安装 JCaptcha**:在项目中...

    验证码 验证码例子 jcaptcha jcaptcha例子

    jCaptcha是Java验证码解决方案的一个开源项目,它提供了丰富的功能和自定义选项,使得开发者能够轻松地在Web应用中集成验证码服务。jCaptcha-1.0-all.jar是这个项目的完整打包文件,包含了所有必要的类和库,可以...

    java jcaptcha 验证码 生成

    JCaptcha提供了丰富的扩展点,允许开发者自定义验证码的样式和行为。例如,你可以编写自己的`Generator`实现,生成具有特定风格的验证码,或者实现更复杂的验证逻辑。 总结,Java JCaptcha验证码框架为开发者提供...

    Jcaptcha 彩色验证码实例

    虽然Jcaptcha提供了丰富的自定义选项以增加验证码的复杂性,但你仍需要考虑其他安全措施,如限制同一IP地址尝试验证的次数,定期更换验证码图片,以及使用HTTPS来保护传输过程中的数据安全。 通过以上步骤,你可以...

    jcaptcha 彩色验证码-下载即可使用

    1. **可定制性**:jCaptcha 允许开发者自定义验证码的生成规则,包括字体、颜色、背景、扭曲程度等,以增加其复杂性和安全性。 2. **无障碍性**:除了图像验证码,jCaptcha 还支持音频验证码,方便视觉障碍的用户...

    Jcaptcha(java验证码生成框架)使用说明(原创)

    Jcaptcha(Java 验证码生成框架)使用说明 一、框架概述 Jcaptcha 是一个 Java 验证码生成框架,提供了详细的说明及例程,通过调查实践后,总结的,希望对大家有帮助。该框架提供了生成验证码图像通用解决办法,...

    security+jcaptcha(验证码)+mybatis框架搭建

    ### 安全性 + Jcaptcha (验证码) + MyBatis框架搭建详解 #### 一、项目背景与目标 本文档将详细介绍如何通过整合Spring Security、Jcaptcha和MyBatis框架来构建一个具备安全性验证功能的Web应用。此项目旨在创建一...

    jeecms源码解读

    7. **jcaptcha自定义验证码例子** 验证码的自定义示例可能包括更改验证码长度、字符集、背景颜色、扭曲程度等,以提高安全性并提升用户体验。 8. **Hibernate Interceptor** Hibernate拦截器允许在特定事件(如...

    security+jcaptcha(验证码)框架搭建

    JCaptcha 提供了丰富的自定义选项,如背景颜色、字体样式等,使得开发者可以根据实际需求定制验证码的外观。 ### 三、环境准备与依赖配置 #### 1. Maven Web App项目创建 假设项目名为 hjzl-app,首先需要在开发...

    jcaptcha写验证码要用到的jar包

    Jcaptcha提供了许多预定义的配置类,如`DefaultCaptchaProducerConfig`,也可以自定义配置。 4. **存储验证码**: - 生成的验证码需要临时存储,以便后续验证。常见的做法是将其值保存在服务器端的Session中,或者...

    jcaptcha例子

    jcaptcha 例子 自定义的验证码例子

    JCaptcha验证码生成

    JCaptcha允许开发者自定义验证码的样式和行为,包括字体、颜色、噪声、扭曲程度等。通过继承`BasicCaptchaGenerator`并重写其方法,可以创建具有独特视觉效果的验证码。 5. **验证用户输入的验证码** 用户输入的...

    JAVA基于JCaptcha生成验证码图片传给前端

    在这个例子中,服务器端会返回一个Base64编码的验证码图片,然后前端将其解码并显示在页面上。 在实际应用中,你还可能需要实现一个接口来接收用户输入的验证码并进行验证。在验证过程中,确保保存了服务器生成的...

    JcaptchaServlet验证码

    JcaptchaServlet、JcaptchaServlet验证码实例,是基本于Servlet编写的一个实例。供需要者下载,制作的一个captcha.jar包的实现。

    jcaptcha图片验证例子

    jcaptcha 图片验证例子。JCaptcha 是一个用来生成验证码的开源Java类库,目前最新的版本是2.0。

    基于acegi的jcaptcha的例子

    这是一个基于acegi的jcaptcha的验证码例子,希望对正在学习的大家有所帮助

    验证码生成与验证例子,验证码例子

    验证码生成与验证例子,验证码例子,验证码

    通过spring整合jcaptcha来处理验证码

    我们可以自定义配置,如字体、颜色、噪声等,以确保生成的验证码既难以被机器识别,又易于人类阅读。 4. **服务层实现**: 在Spring的服务层,我们需要创建一个服务接口和其实现类,用于生成和验证验证码。服务...

Global site tag (gtag.js) - Google Analytics