`
chenzhou123520
  • 浏览: 4260676 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

kaptcha验证码组件使用简介

    博客分类:
  • Java
阅读更多

Kaptcha是一个基于SimpleCaptcha的验证码开源项目。

官网地址:http://code.google.com/p/kaptcha/

 

kaptcha的使用比较方便,只需添加jar包依赖之后简单地配置就可以使用了。kaptcha所有配置都可以通过web.xml来完成,如果你的项目中使用了Spring MVC,那么则有另外的一种方式来实现。

 

一、简单的jsp-servlet项目

1.添加jar包依赖

如果你使用maven来统一管理jar包,则在工程的pom.xml中添加dependency

<!-- kaptcha -->
<dependency>
	<groupId>com.google.code.kaptcha</groupId>
	<artifactId>kaptcha</artifactId>
	<version>2.3.2</version>
</dependency>

如果是非maven管理的项目,则直接在官网下载kaptcha的jar包,然后添加到项目lib库中,下载地址:http://code.google.com/p/kaptcha/downloads/list

 

 

2.配置web.xml

上面说了,kaptcha都是在web.xml中配置,我们必须在web.xml中配置kaptcha的servlet,具体如下:

<servlet>
	<servlet-name>Kaptcha</servlet-name>
	<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>Kaptcha</servlet-name>
	<url-pattern>/kaptcha.jpg</url-pattern>
</servlet-mapping>

其中servlet的url-pattern可以自定义。

 

kaptcha所有的参数都有默认的配置,如果我们不显示配置的话,会采取默认的配置。

如果要显示配置kaptcha,在配置kaptcha对应的Servlet时,在init-param增加响应的参数配置即可。示例如下:

<servlet>
	<servlet-name>Kaptcha</servlet-name>
	<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
	<init-param>
		<param-name>kaptcha.image.width</param-name>
		<param-value>200</param-value>
		<description>Width in pixels of the kaptcha image.</description>
	</init-param>
	<init-param>
		<param-name>kaptcha.image.height</param-name>
		<param-value>50</param-value>
		<description>Height in pixels of the kaptcha image.</description>
	</init-param>
	<init-param>
		<param-name>kaptcha.textproducer.char.length</param-name>
		<param-value>4</param-value>
		<description>The number of characters to display.</description>
	</init-param>
	<init-param>
		<param-name>kaptcha.noise.impl</param-name>
		<param-value>com.google.code.kaptcha.impl.NoNoise</param-value>
		<description>The noise producer.</description>
	</init-param>
</servlet>

具体的配置参数参见:http://code.google.com/p/kaptcha/wiki/ConfigParameters

 

3.页面调用

<form action="submit.action">
	<input type="text" name="kaptcha" value="" /><img src="kaptcha.jpg" />
</form>

 

4.在submit的action方法中进行验证码校验

//从session中取出servlet生成的验证码text值
String kaptchaExpected = (String)request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
//获取用户页面输入的验证码
String kaptchaReceived = request.getParameter("kaptcha");
//校验验证码是否正确
if (kaptchaReceived == null || !kaptchaReceived.equalsIgnoreCase(kaptchaExpected)){
	setError("kaptcha", "Invalid validation code.");
}

注:确保JDK设置了 -Djava.awt.headless=true

 

5.实现页面验证码刷新

<img src="kaptcha.jpg" width="200" id="kaptchaImage" title="看不清,点击换一张" />
<script type="text/javascript">
	$(function() {
		$('#kaptchaImage').click(function() {$(this).attr('src','kaptcha.jpg?' + Math.floor(Math.random() * 100));});
	});
</script>
<br /><small>看不清,点击换一张</small>

注:为了避免浏览器的缓存,可以在验证码请求url后添加随机数

 

二、Spring mvc项目中使用kaptcha

1.添加captchaProducer bean定义

<!-- 配置kaptcha验证码 -->
<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
	<property name="config">
		<bean class="com.google.code.kaptcha.util.Config">
			<constructor-arg type="java.util.Properties">
				<props>
					<prop key="kaptcha.image.width">100</prop>
					<prop key="kaptcha.image.height">50</prop>
					<prop key="kaptcha.noise.impl">com.google.code.kaptcha.impl.NoNoise</prop>
					<prop key="kaptcha.textproducer.char.string">0123456789abcdefghijklmnopqrstuvwxyz</prop>
					<prop key="kaptcha.textproducer.char.length">4</prop>
				</props>
			</constructor-arg>
		</bean>
	</property>
</bean>

2.生成验证码的Controller

import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;

/**
 * ClassName: CaptchaImageCreateController <br/>
 * Function: 生成验证码Controller. <br/>
 * date: 2013-12-10 上午11:37:42 <br/>
 *
 * @author chenzhou1025@126.com
 */
@Controller
public class CaptchaImageCreateController {
	private Producer captchaProducer = null;

	@Autowired
	public void setCaptchaProducer(Producer captchaProducer){
		this.captchaProducer = captchaProducer;
	}

	@RequestMapping("/kaptcha.jpg")
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception{
		// Set to expire far in the past.
		response.setDateHeader("Expires", 0);
		// Set standard HTTP/1.1 no-cache headers.
		response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
		// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
		response.addHeader("Cache-Control", "post-check=0, pre-check=0");
		// Set standard HTTP/1.0 no-cache header.
		response.setHeader("Pragma", "no-cache");

		// return a jpeg
		response.setContentType("image/jpeg");

		// create the text for the image
		String capText = captchaProducer.createText();

		// store the text in the session
		request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);

		// create the image with the text
		BufferedImage bi = captchaProducer.createImage(capText);

		ServletOutputStream out = response.getOutputStream();

		// write the data out
		ImageIO.write(bi, "jpg", out);
		try {
			out.flush();
		} finally {
			out.close();
		}
		return null;
	}
}

 

3.校验用户输入的Controller

/**
 * ClassName: LoginController <br/>
 * Function: 登录Controller. <br/>
 * date: 2013-12-10 上午11:41:43 <br/>
 *
 * @author chenzhou1025@126.com
 */
@Controller
@RequestMapping("/login")
public class LoginController {

	/**
	 * loginCheck:ajax异步校验登录请求. <br/>
	 *
	 * @author chenzhou1025@126.com
	 * @param request
	 * @param username 用户名
	 * @param password 密码
	 * @param kaptchaReceived 验证码
	 * @return 校验结果
	 * @since 2013-12-10
	 */
	@RequestMapping(value = "check", method = RequestMethod.POST)
	@ResponseBody
	public String loginCheck(HttpServletRequest request,
			@RequestParam(value = "username", required = true) String username,
			@RequestParam(value = "password", required = true) String password,
			@RequestParam(value = "kaptcha", required = true) String kaptchaReceived){
		//用户输入的验证码的值
		String kaptchaExpected = (String) request.getSession().getAttribute(
				com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
		//校验验证码是否正确
		if (kaptchaReceived == null || !kaptchaReceived.equals(kaptchaExpected)) {
			return "kaptcha_error";//返回验证码错误
		}
		//校验用户名密码
		// ……
		// ……
		return "success"; //校验通过返回成功
	}
}

 

分享到:
评论
2 楼 masuweng 2019-02-26  
1 楼 caobingyi 2018-02-21  
你好,问下html是怎么调用loginCheck方法的?

相关推荐

    kaptcha验证码组件使用简介解析

    kaptcha验证码组件使用简介解析 Kaptcha验证码组件是基于SimpleCaptcha的开源项目,提供了强大的验证码生成和验证功能。该组件的使用非常方便,只需添加jar包依赖和简单的配置就可以使用了。 一、添加jar包依赖 ...

    vue+springboot+redis+kaptcha实现登录验证码

    本教程将介绍如何结合Vue.js前端框架、Spring Boot后端框架、Redis缓存服务以及Kaptcha验证码技术,实现一个前后端分离的登录页面验证码功能。这个组合可以提供高效、安全且用户友好的验证机制。 首先,Vue.js是一...

    kaptcha 验证码demo,附simplecaptcha

    Kaptcha的核心组件包括: 1. **Generator**: 生成验证码图像的类,负责将随机生成的文字转化为图像。 2. **Config**: 存储和管理验证码配置的接口,如字体、颜色、背景等。 3. **DefaultKaptcha**: 默认的验证码...

    谷歌验证码使用工具——kaptcha-2.3.2

    【谷歌验证码使用工具——kaptcha-2.3.2】是一款基于Java的开源验证码生成库,主要用于网站的身份验证,防止自动化的机器人或者恶意攻击者进行非法操作。kaptcha这个名字是"CAPTCHA"(Completely Automated Public ...

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

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

    SimpleCaptcha验证码组件使用

    《SimpleCaptcha验证码组件使用详解》 验证码,作为一种防止恶意自动化操作的安全机制,在Web开发中扮演着至关重要的角色。SimpleCaptcha是一款轻量级的Java验证码生成组件,它以其简单易用、高度可定制的特点,...

    java验证码组件kaptcha使用方法

    Java验证码组件Kaptcha是用于生成图像验证码的一种工具,它由Google Code维护,为JAVA开发提供了简单易用的验证码实现。Kaptcha的主要目的是防止自动化程序(如机器人)对网站进行恶意操作,例如批量注册、刷票等。...

    kaptcha demo 简单的验证码工具

    通过 kaptcha_demo,开发者可以快速了解和掌握 Kaptcha 的使用,将其应用到自己的项目中,实现高效且安全的验证码功能。对于初学者,这是一个很好的学习资源,可以深入了解验证码的生成原理和实践应用。

    基于SSH实现登录的Demo

    在基于SSH实现登录的Demo中,我们通常会用到以下几个核心组件: 1. **SSH服务器**:这是接收客户端连接并处理SSH协议的服务器端软件,如OpenSSH服务器。 2. **SSH客户端**:客户端软件允许用户与SSH服务器交互,如...

    kaptcha.jar

    本文将深入探讨kaptcha.jar这一验证码资源包,揭示其工作原理、功能特性以及在实际应用中的使用方法。 kaptcha.jar是一个专门用于生成验证码的Java库,它为开发者提供了简单易用的API,以生成各种复杂度的图像...

    kaptcha-2.3.2.jar工具类

    kaptcha的核心功能在于生成复杂且难以由计算机识别的图像验证码,它的主要组件包括以下几个方面: 1. **配置参数**:kaptcha提供了丰富的配置选项,允许开发者自定义验证码的生成方式,例如字体类型、颜色、噪点、...

    vue中使用极验验证码的方法(附demo)

    这是因为Vue组件在`mounted`阶段已完成DOM挂载,此时进行初始化可以确保验证码组件正确地绑定到页面上。在`methods`对象中定义一个`init`方法,用于初始化验证码: ```javascript var app = new Vue({ el: '#app',...

    spring-gateway实现登录验证码校验的代码,百分百可用

    在本案例中,我们使用了 Kaptcha 插件来生成验证码。Kaptcha 是一个 Java 实现的验证码生成器,它可以生成包含字母和数字的复杂图片,并具有可配置的样式和扭曲程度,从而增加破解的难度。 首先,我们需要在项目中...

    kaptcha-spring-boot-starter-master.zip

    本文将深入探讨如何在Spring Boot框架下集成并使用Kaptcha组件,帮助开发者构建更安全的应用。 一、Kaptcha概述 Kaptcha,源自Google,主要任务是生成那些人类可以轻松识别但机器难以辨认的图像验证码。Kaptcha的...

    原创-用Ajax制作带图形验证码的登录页面.

    首先,需要下载Kaptcha图形验证码组件。可以从其官方地址 [http://code.google.com/p/kaptcha/](http://code.google.com/p/kaptcha/) 获取最新的版本(2.3版)。下载完成后,你会得到两个JAR文件:`Kaptcha-2.3.jar`...

    linux环境下验证码不显示问题

    - 考虑使用外部服务来生成验证码图片,这样可以避免直接在服务器端处理图形渲染,减少服务器负载。 - 例如,可以使用云服务提供商提供的API来生成验证码图片。 4. **升级Java版本**: - 如果当前使用的Java版本...

    三种方法实现验证码

    总结起来,实现验证码的方法多种多样,本文主要介绍了使用Servlet、JCaptcha和Kaptcha的实现方式。每种方法都有其特点和适用场景,开发者可以根据项目需求选择合适的技术。在实际开发中,验证码的安全性和用户体验都...

    kaptcha-2.3.2

    kaptcha的主要组件包括: 1. **Com抽象类**:这是验证码生成的基础,提供了生成和验证验证码的基本方法。子类化这个类可以实现自定义的验证码生成逻辑。 2. **DefaultKaptcha类**:这是kaptcha的默认实现,它实现...

    kaptcha232_jb51.rar

    2. **使用说明 .txt**:这可能是关于如何在项目中使用 kaptcha 库的指南,包括如何配置、如何生成验证码以及如何将其集成到 web 应用中的详细步骤。 3. **去脚本之家看看.url**:这可能是一个链接,指向脚本之家...

Global site tag (gtag.js) - Google Analytics