`
www-hello
  • 浏览: 100418 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JCaptcha 开源的验证码组件

    博客分类:
  • java
阅读更多

官方getting start指导:5 minutes application integration tutorial
http://jcaptcha.octo.com/confluence/display/general/5+minutes+application+integration+tutorial

 

新建Maven工程:

 

输入项目名称等选项:

 

 

添加dependiencies

 

 

添加完之后在重新生成Maven工程的时候出现下面的错误:
    Missing artifact com.jhlabs:imaging:jar:01012005:compile
显然是jcaptcha所倚赖的一个jar包不在常用的仓库里面,后来在其官方网站 上终于找到一个包含此包的仓库地址

 

<repositories>
  	<repository>
  		<id>atlassian</id>
  		<name>atlassian</name>
  		<url>http://repository.atlassian.com/maven2</url>
  	</repository>
  </repositories>
 

Implement a CaptchaService
新建类:CaptchaServiceSingleton.java

package net.hubs1.web;

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

public class CaptchaServiceSingleton {

	private static ImageCaptchaService instance = new DefaultManageableImageCaptchaService();

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

 

新建Servlet类:ImageCaptchaServlet

package net.hubs1.web.servlet;

import com.octo.captcha.service.CaptchaServiceException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.hubs1.web.CaptchaServiceSingleton;

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


public class ImageCaptchaServlet extends HttpServlet {


    public void init(ServletConfig servletConfig) throws ServletException {

        super.init(servletConfig);

    }


    protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) 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 = httpServletRequest.getSession().getId();
        // call the ImageCaptchaService getChallenge method
            BufferedImage challenge =
                    CaptchaServiceSingleton.getInstance().getImageChallengeForID(captchaId,
                            httpServletRequest.getLocale());

            // a jpeg encoder
            JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(jpegOutputStream);
            jpegEncoder.encode(challenge);
        } catch (IllegalArgumentException e) {
            httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        } catch (CaptchaServiceException e) {
            httpServletResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            return;
        }

        captchaChallengeAsJpeg = jpegOutputStream.toByteArray();

        // flush it in the response
        httpServletResponse.setHeader("Cache-Control", "no-store");
        httpServletResponse.setHeader("Pragma", "no-cache");
        httpServletResponse.setDateHeader("Expires", 0);
        httpServletResponse.setContentType("image/jpeg");
        ServletOutputStream responseOutputStream =
                httpServletResponse.getOutputStream();
        responseOutputStream.write(captchaChallengeAsJpeg);
        responseOutputStream.flush();
        responseOutputStream.close();
    }
}
 
把Servlet配置到web.xml文件中:
 
  <servlet>
  	<servlet-name>jcaptcha</servlet-name>
  	<servlet-class>net.hubs1.web.servlet.ImageCaptchaServlet</servlet-class>
  	<load-on-startup>0</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>jcaptcha</servlet-name>
  	<url-pattern>/jcaptcha</url-pattern>
  </servlet-mapping>
 

修改index.jsp文件:

<%@ page language="java" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>jcaptcha example</title>
  </head>
  <body>
    <form action="testjcaptcha">
    	<label for="j_captcha_response">请填写验证码:</label><br/>
    	<img src="jcaptcha">
		<input type='text' name='j_captcha_response' value=''>
    	<input type="submit" value="提交">
    </form>
  </body>
</html>
 

新建验证Servle类:

package net.hubs1.web.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.hubs1.web.CaptchaServiceSingleton;

import com.octo.captcha.service.CaptchaServiceException;

public class ValidationServlet extends HttpServlet {

	public void init(ServletConfig servletConfig) throws ServletException {
		super.init(servletConfig);
	}

	protected void doGet(HttpServletRequest httpServletRequest,
			HttpServletResponse httpServletResponse) throws ServletException, IOException {
		Boolean isResponseCorrect = Boolean.FALSE;
		// remenber that we need an id to validate!
		String captchaId = httpServletRequest.getSession().getId();
		// retrieve the response
		String response = httpServletRequest.getParameter("j_captcha_response");
		// Call the Service method
		try {
			isResponseCorrect = CaptchaServiceSingleton.getInstance().validateResponseForID(
					captchaId, response);
		} catch (CaptchaServiceException e) {
			// should not happen, may be thrown if the id is not valid
		}

		httpServletResponse.setContentType("text/html;charset=utf-8");
		PrintWriter out = httpServletResponse.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>验证结果:</TITLE></HEAD>");
		out.println("  <BODY>");
		if(isResponseCorrect == Boolean.TRUE){
			out.print("验证通过!");
		}else {
			out.print("验证失败!");
		}
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();

	}

	protected void doPost(HttpServletRequest httpServletRequest,
			HttpServletResponse httpServletResponse) throws ServletException, IOException {
		doGet(httpServletRequest, httpServletResponse);
	}
}
 

把验证Servlet配置到web.xml文件中:

  <servlet>
  	<servlet-name>testjcaptcha</servlet-name>
  	<servlet-class>net.hubs1.web.servlet.ValidationServlet</servlet-class>
  	<load-on-startup>0</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>testjcaptcha</servlet-name>
  	<url-pattern>/testjcaptcha</url-pattern>
  </servlet-mapping>
 


在Pom.xml中添加Web服务器:Jetty插件

 

 

 

修改Pom.xml,在<build>/<plugins>标签下添加如下内容(为了解决“ 警告:com.sun.image.codec.jpeg.JPEGCodec 是 Sun 的专用 API,可能会在未来版本中删除”)

	<plugin>
    		<groupId>org.apache.maven.plugins</groupId>
    		<artifactId>maven-compiler-plugin</artifactId>
    		<configuration>
    			<compilerArguments>
    				<verbose/>
					<bootclasspath>${java.home}/lib/rt.jar</bootclasspath>
    			</compilerArguments>
    		</configuration>
    	</plugin>
 

选中Pom.xml文件,按下 Alt + Shift + X , M 键,弹出运行配置窗口:
在Goals中输入:clean package jetty:run

 

 

运行。
测试:http://localhost:8080/jcaptchaTest/
网页效果:

 

 

 

 

  • 大小: 51 KB
  • 大小: 36.4 KB
  • 大小: 37.1 KB
  • 大小: 30.5 KB
  • 大小: 37.9 KB
  • 大小: 15.2 KB
分享到:
评论

相关推荐

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

    jCaptcha 是一个基于 Java 的开源验证码库,它提供了丰富的图形验证码解决方案。这个库的特点在于可以创建多彩且复杂的图像,这使得机器难以识别,但对人类来说相对容易辨认。 jCaptcha 的主要优点包括: 1. **可...

    验证码开源组件--Jcaptcha和Kaptcha

    本篇文章将详细讲解两个流行的验证码开源组件——Jcaptcha和Kaptcha,它们为开发者提供了便捷的方式来生成和验证图像验证码。 首先,Jcaptcha(Just Another CAPTCHA Toolkit)是一个强大的Java验证码框架,它提供...

    JCaptcha验证码生成

    本文将深入探讨JCaptcha这个开源组件,它是Java环境下实现验证码生成的一个优秀工具。 JCaptcha(Java CAPTCHA)是一款强大的、可定制的验证码解决方案,由Gregg Sporar开发。它的主要目标是提供一种简单、高效的...

    jcaptcha验证码所需jar包

    在IT领域,特别是Web开发中,jcaptcha(Java CAPTCHA)是一个广泛使用的开源验证码库,它提供了一套完整的解决方案来生成和验证这些图像验证码。 jcaptcha的jar包是开发人员集成验证码功能到Java应用程序所需的核心...

    jcaptcha组件jar包

    ptcha是一个开源的用来生成图形验证码的Java开源组件,使用起来也是非常的简单方便。 jcapthca是非常强大的,不光是可以生成图片式的验证码,还可以生成声音式的(新浪就使用了双重验证码)。 Jcaptcha是CAPTCHA里面...

    jcaptcha4struts2-demo-2.0.1.zip_DEMO_JCaptcha4Struts2.jar_jcaptc

    《Struts2环境下的Jcaptcha4Struts2验证码组件详解》 在Web开发中,验证码是一种常见的安全机制,用于防止自动化的恶意攻击,如机器人填写表单或进行非法操作。Struts2作为Java Web开发中广泛应用的MVC框架,与...

    浅析Java验证码生成库JCaptcha

    Java验证码生成库JCaptcha是一个广泛使用的开源库,用于在Java应用程序中创建安全的、难以破解的验证码。验证码(CAPTCHA)的主要目的是防止自动化程序(如机器人或爬虫)进行恶意操作,例如注册虚假账户或进行大量...

    java源码:Java验证码生成库 JCaptcha.rar

    Java验证码生成库JCaptcha是一个广泛使用的开源项目,用于在Web应用程序中生成安全的、难以破解的验证码。这个库是用Java编写的,旨在提供一种可靠的方法来防止自动化的机器人或恶意脚本对网站进行非法操作,如批量...

    基于java的验证码生成库 JCaptcha.zip

    Java验证码生成库JCaptcha是一个广泛使用的开源项目,它为Java应用程序提供了强大的安全验证工具。验证码(Completely Automated Public Turing test to tell Computers and Humans Apart)的主要目的是防止自动化...

    Struts验证码插件 JCaptcha4Struts2

    JCaptcha4Struts2插件是将Jcaptcha与Struts2框架集成的组件,使得开发者可以轻松地在Struts2应用中添加验证码功能。使用该插件,你可以实现以下功能: 1. **安装和配置**:在Struts2应用中,你需要将JCaptcha4...

    jcaptcha-bin-1.0-RC6.zip

    《jcaptcha彩色验证码技术解析与应用》 验证码(CAPTCHA)是一种用于防止自动化程序非法操作...对于开发者来说,理解并掌握jCaptcha的使用不仅可以提升应用的安全性,也能锻炼在实际项目中集成和定制开源组件的能力。

    jfinal添加jcaptcha验证码实现方法

    JCaptcha(Just Another CAPTCHA)是一个开源的Java验证码库,它提供了一种生成图像验证码的方法,可以有效防止自动化脚本和机器人对网站进行恶意操作。下面我们将详细介绍如何在JFinal中配置和使用JCaptcha。 首先...

    基于java的Struts验证码插件 JCaptcha4Struts2.zip

    Struts验证码插件JCaptcha4Struts2是一个用于Java Web应用的安全组件,旨在防止自动化的机器人或恶意软件通过表单提交进行欺诈性操作。在Web开发中,验证码(CAPTCHA)是一种常用的方法,用于区分人类用户和计算机...

    jcaptcha源码

    JCAPTCHA,全称Java Compliant CAPTCHA,是一个开源的验证码解决方案,主要用于防止自动化的机器人程序对网站进行恶意操作,如注册、投票或留言等。JCAPTCHA的设计目标是提供一种高效且可自定义的验证码生成器,以...

    基于java的开发源码-验证码生成库 JCaptcha.zip

    JCaptcha,全称为“Just Another CAPTCHA”,由Greg Westermeyer开发,是Java平台上的开源验证码解决方案。它提供了一种方式来生成动态、复杂且难以通过机器识别的图像验证码,同时保持了良好的可访问性和易用性。 ...

    CAS4.2.7集成jcaptcha依赖的jar

    jCaptcha是一个开源的Java验证码库,它提供了生成复杂图像验证码的能力,以此来防止恶意机器人或自动化脚本进行非法操作。 首先,让我们深入了解jCaptcha的核心组件。`jcaptcha-api-1.0.jar`是jCaptcha的API接口库...

    基于Java的实例开发源码-Struts验证码插件 JCaptcha4Struts2.zip

    该插件基于Java的开源项目JCaptcha(Just Another CAPTCHA)构建,提供了可视化挑战响应测试,即我们通常所说的验证码。验证码的主要目的是验证用户是真实的人而不是自动化程序,以此来保护网站免受垃圾邮件、恶意...

Global site tag (gtag.js) - Google Analytics