`

jcaptcha 之 图片验证码

    博客分类:
  • java
阅读更多

通过iframe 实现的"Ajax" 实现刷新验证码 你懂得 ,项目还要添加jcaptcha包
我这边是添加的 jcaptcha源码 ,喜欢看源码的JE朋友可以通过svn
https://jcaptcha.svn.sourceforge.net/svnroot/jcaptcha

还需要添加


主要提供页面
Index.jsp
<html>
  <head>
    <title>jcaptcha example</title>
  </head>
  <script type="text/javascript" src="<%=path%>/js/jquery/jquery.js"></script> 
  <script type="text/javascript">
	function ajaxRefresh(){
		
		//兼容 IE Firefox Safari 		 
		document.getElementById('image').contentWindow.location.reload();
		//$("#image").get(0).src="ImageCaptchaServlet.servlet";
	}  
	
	function ajaxValidateCapt(){
		var captchaId ;
		captchaId = jQuery('#captchaId').val();
		jQuery.ajax({
	         type: "POST",
	         url: "ValidateCaptcha.servlet", 
	         data: {"captchaId":captchaId},
	         success: function(msg){ 
	        	jQuery('#_msg').html(msg);
		     }
		});
	}
	
  </script>
  <body>
	    <div id="_msg"></div>
    	请填写验证码:<br/>
		<iframe width="120" height="70" id="image" src="image.jsp" frameborder="0"></iframe><br>
		<a href="javascript:void(0)" onclick="ajaxRefresh()">ajaxRefresh</a>
		<br>
		<input type='text' name='captchaId' id='captchaId' value=''><br>
    	<input type="button" onclick="ajaxValidateCapt()" value="提交">
  </body>
</html>


image.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<img  width="85" height="41" src="ImageCaptchaServlet.servlet" onclick="ajaxRefresh()" ><br/>
</body>
</html>

web.xml  以下是配置的Servlet
<web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <!-- 验证码生成  -->
  <servlet>
    <javaee:description></javaee:description>
    <javaee:display-name>ImageCaptchaServlet</javaee:display-name>
    <servlet-name>ImageCaptchaServlet</servlet-name>
    <servlet-class>captcha.servlet.ImageCaptchaServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ImageCaptchaServlet</servlet-name>
    <url-pattern>/ImageCaptchaServlet.servlet</url-pattern>
  </servlet-mapping>
  
  <!-- 验证 验证码 -->
  <servlet>
    <javaee:description></javaee:description>
    <javaee:display-name>ValidateCaptcha</javaee:display-name>
    <servlet-name>ValidateCaptcha</servlet-name>
    <servlet-class>captcha.servlet.ValidateCaptchaServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ValidateCaptcha</servlet-name>
    <url-pattern>/ValidateCaptcha.servlet</url-pattern>
  </servlet-mapping>
</web-app>


CaptchaServiceSingleton.java
获取ImageCaptchaService 对象 
package captcha;

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

/**
 * 获取ImageCaptchaService 对象
 * 如果是SPRING 可以通过注入进行获取对象
 * @author Administrator
 *
 */
public class CaptchaServiceSingleton {

	private static ImageCaptchaService instance = null;

	private CaptchaServiceSingleton(){
		
	}
	//单利实现
	public static ImageCaptchaService getInstance() {
		if(null!=instance){
			return instance;
		}
		return instance = new DefaultManageableImageCaptchaService();
	}
}


ImageCaptchaServlet.java
验证码生成
package captcha.servlet;

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

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 captcha.CaptchaServiceSingleton;

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


public class ImageCaptchaServlet extends HttpServlet {


    /** 
	 * simple-servlet-image-sample   
	 * @Title: ImageCaptchaServlet.java
	 * @Package captcha.servlet
	 * @Description: TODO
	 * @author liazhou 
	 * @date 2012-1-6 下午03:03:54
	 * @version V1.0   
	 */
	private static final long serialVersionUID = -4590982813167593710L;


	public void init(ServletConfig servletConfig) throws ServletException {

        super.init(servletConfig);

    }

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doPost(request, response);
	}
	
    protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {

       byte[] captchaChallengeAsJpeg = null;
        ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
        try {
        //相关联的 HttpSession 得到会话id来识别,产生相应的验证码
        String captchaId = httpServletRequest.getSession().getId();
        // Method to retrive the image challenge corresponding to the given ticket.
        BufferedImage challenge = CaptchaServiceSingleton.getInstance().getImageChallengeForID(captchaId,
        		httpServletRequest.getLocale());
        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();
        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();
    }
}


ValidateCaptchaServlet.java
验证码的验证
package captcha.servlet;

import java.io.IOException;

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

import captcha.CaptchaServiceSingleton;

/**
 * Servlet implementation class ValidateCaptcha
 */
public class ValidateCaptchaServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ValidateCaptchaServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		boolean bool = false;
		String message = "";
		String captchaId = request.getParameter("captchaId");
		if(null!=captchaId && !"".equals(captchaId)){
			//通过session id 获取 对应的验证码对象并验证是否正确
			bool = CaptchaServiceSingleton.getInstance().validateResponseForID(request.getSession().getId(), captchaId);
		}
		if(bool){
			message = "验证成功";
		}else{
			message= "验证失败";
		}
		response.setCharacterEncoding("UTF-8");
		response.getWriter().print(message);
//		request.getRequestDispatcher("").forward(request, response);
	}

}





页面及依赖jar截图





  • 大小: 13.1 KB
  • 大小: 2.7 KB
分享到:
评论

相关推荐

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

    jCaptcha是一个基于Java的验证码解决方案,它能够生成包括字母、数字、甚至是图片元素在内的复杂验证码。jCaptcha的主要特点是其可定制性,开发者可以根据需要调整验证码的样式、复杂度以及过期时间等参数。 2. **...

    JCaptcha 开源的验证码组件

    **JCaptcha开源验证码组件详解** 验证码(CAPTCHA)是一种用于防止自动机器人滥用服务的技术,它通过让用户解决人类容易但机器难以解决的难题来验证用户是否是真实的人。JCaptcha(Just Another CAPTCHA)是一个...

    java jcaptcha 验证码 生成

    验证码(CAPTCHA)是一种防止机器自动操作的安全机制,它通过让用户输入图片或音频中显示的随机字符来验证用户是否为真实的人。在Java开发中,JCaptcha是一个广泛使用的开源库,它提供了一种简单且灵活的方式来生成...

    java通过JCaptcha生成验证码

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

    jcaptcha的验证码例子

    例如,`fisheyebackgrounds`和`gimpybackgrounds`存储了不同类型的背景图片,可以用来创建更具视觉挑战性的验证码;`integrations`可能包含了与Spring、Struts等流行框架的整合示例。 要在基于`Acegi`的安全框架中...

    Jcaptcha 彩色验证码实例

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

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

    在Java中,我们可以使用开源库JCaptcha来生成验证码图片,并将其传递给前端以供用户验证。下面将详细介绍如何实现这一过程。 首先,JCaptcha是一个Java CAPTCHA(Completely Automated Public Turing test to tell ...

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

    4. **集成Jcaptcha**:配置Jcaptcha来生成验证码图片,并在登录页面上展示。 5. **数据持久化**:利用MyBatis进行数据库操作,如用户信息的增删改查等。 6. **测试**:编写测试用例来验证系统的功能性和安全性。 ...

    jcaptcha做jsp彩色验证码

    标题"jcaptcha做jsp彩色验证码"即指使用jCaptcha库在JSP应用中生成彩色的验证码图片。 首先,我们需要引入jCaptcha的相关依赖。在这个案例中,我们看到压缩包内的"jcaptcha-all-1[1].0-RC6.jar"就是jCaptcha的核心...

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

    - **Velocity**:模板引擎,用于生成验证码图片。 - **SLF4J API**:日志框架。 - **Servlet API**:Servlet 相关的 API 支持。 ```xml &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-webmvc &lt;version&gt;...

    jcaptcha 验证码程序

    这个程序是基于`jcaptcha`库,旨在帮助开发者快速实现自定义的图片验证码功能。 ### 1. jcaptcha库介绍 `jcaptcha`,全称Java CAPTCHA,是一个用Java实现的验证码生成库。它提供了丰富的选项来定制验证码的外观和...

    jcaptcha图片验证例子

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

    生成验证码 jsp 图片验证码

    在本主题中,我们将详细探讨如何使用Java Servlet(jsp)来生成图片验证码。 首先,我们需要理解验证码的基本原理。验证码通常包含一串随机生成的字母和数字,显示在一张图片上,用户需要输入看到的文字以证明他们...

    一些字符图片验证码破解的方法

    在训练深度学习模型前,还需构建一个标准化的字符训练数据集,常见的生成验证码的库包括JCaptcha(Java类库)、Python的captcha库、PHP的simple-php-captcha库等。同时还有在线字体识别和下载网站,以及根据需要查看...

    java源码:Struts验证码插件 JCaptcha4Struts2.rar

    这些文件通常包含一个图像标签,显示由JCaptcha生成的验证码图片,以及一个文本框供用户输入验证码。 4. **JCaptcha库**:可能包含jcaptcha相关的jar文件,这些是运行JCaptcha所需的基础库,包括图像生成、验证等...

    java图片验证码源码

    本教程将深入探讨如何使用Java创建一个简单的图片验证码源码。 首先,我们需要了解验证码的基本原理。验证码通常由一组随机生成的字符组成,这些字符可能是字母、数字或者符号,显示在一个扭曲或带有噪声的图像上。...

    jcaptcha-1.0.jar验证码生成包

    通过此类可以自动生成验证码类创建ImageCaptchaService captchaService;BufferedImage img = captchaService.getImageChallengeForID( captchaId, request.getLocale()); ImageIO.write(img, string图片扩展名, ...

    Java后端生成图片验证码

    Java后端生成图片验证码是一种常见的安全机制,用于防止自动化脚本或机器人进行恶意操作,如批量注册、频繁登录等。这种技术通常涉及到多个组件,包括前端展示、后端生成以及客户端验证。以下是对这个主题的详细说明...

    三种方法实现验证码

    本篇文章将详细讲解通过Servlet、JCaptcha和Kaptcha三种方式来实现验证码的功能。 首先,我们来看Servlet实现验证码的方式。Servlet是Java Web开发中的一个基础组件,它可以接收和响应HTTP请求。在实现验证码时,...

Global site tag (gtag.js) - Google Analytics