`

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
分享到:
评论

相关推荐

    java通过JCaptcha生成验证码

    java通过JCaptcha生成验证码,支持原生的验证码生成、自定义干扰线、自定义背景图片。

    JCaptcha 开源的验证码组件

    NULL 博文链接:https://lj-zhu.iteye.com/blog/1028970

    jcaptcha 验证码程序

    Java基于jcaptcha 生成图片验证码的程序,可自定义图片大小,生成的字母及数字大小个数,支持汉字。直接导入Eclipse即可使用。

    jcaptcha图片验证例子

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

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

    由于网络安全问题威胁很大,不时有网警做端口扫描预警通知(建议改造的通知文件),迫于种种的网络安全压力,写这个后端生成工具。 源码使用方式参考文章【http://t.csdn.cn/eoj39】

    jcaptcha-1.0.jar验证码生成包

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

    jcaptcha组件jar包

    JCaptcha jca ptcha是一个开源的用来...jcapthca是非常强大的,不光是可以生成图片式的验证码,还可以生成声音式的(新浪就使用了双重验证码)。 Jcaptcha是CAPTCHA里面的一个比较著名的项目。 这里为使用它所需的jar包

    创建验证码工具类(源码)

    使用jcaptcha生成验证码图片,简化了设置。 里面的test类为示例

    j'pajcaptcha

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

    jcaptcha-1.0-bin

    登录验证,图片验证,可以实现前台验证码,网站开发方便

    java开源包5

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    java开源包1

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    java开源包11

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    java开源包2

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    java开源包3

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    java开源包6

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    java开源包10

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    java开源包4

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    java开源包8

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

    java开源包7

    Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...

Global site tag (gtag.js) - Google Analytics