您的位置:首页 > 编程语言 > Go语言

google验证码 kaptcha 的使用

2015-06-06 23:04 706 查看
首先去官网下载了kaptcha的压缩包

下载地址在:下载地址

下载了后解压,文件目录里有

doc、javadoc、src、kaptcha.war、kaptcha-2.3.2.jar、kaptcha-2.3.2-jdk14.jar、LICENSE.txt、README.txt

首先打开readme.txt

内容如下:

kaptcha - A kaptcha generation engine.

Please see the website for more information about this project.
 http://code.google.com/p/kaptcha/ 
thanks!


好像并没有什么卵用,于是接着找。

看到kaptcha.war,眼前一亮,这不就是web工程的一个压缩格式吗?于是就把这个文件搬到tomcat的webapps目录下。

然后访问 http://localhost:8080/kaptcha 果然进来了。

页面效果如下:



这个时候在tomcat的webapps目录下也多一个解压好的kaptcha项目,项目的结构如下:

-kaptcha

-META-INF

-MANIFEST.MF

-WEB-INF

-lib

-kaptcha-2.3.2.jar

-web.xml

-KaptchaExample.jsp

这下怎么使用kaptcha应该是问题不大了,模仿他就行了。

重要的步骤应该分为3步:

1.将kaptcha-2.3.2.jar放到WEB-INF/lib/目录下

2.配置一下web.xml文件

3.模仿一下*.jsp文件,这样就可以使用验证码了,顺便写个servlet处理一下。

先来分析一下他的例子,再看看剩下的步骤怎么做:

打开KaptchaExample.jsp与web.xml文件,内容如下:

KaptchaExample.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<%@ page language="java" contentType="text/html; charset=UTF-8" %>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Kaptcha Example</title>
	</head>
	<body>
	
		Enter in the <a href="http://code.google.com/p/kaptcha/">Kaptcha</a> to see if it matches what is stored in the session attributes.
		
		<table>
			<tr>
				<td><img src="Kaptcha.jpg"></td>
				<td valign="top">
			
					<form method="POST">
						<br>sec code:<input type="text" name="kaptchafield"><br />
						<input type="submit" name="submit">
					</form>
				</td>
			</tr>
		</table>	

		<br /><br /><br /><br />
		
		<%
			String c = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
			String parm = (String) request.getParameter("kaptchafield");
			
			out.println("Parameter: " + parm + " ? Session Key: " + c + " : ");
			
			if (c != null && parm != null) {
				if (c.equals(parm)) {
					out.println("<b>true</b>");
				} else {
					out.println("<b>false</b>");
				}
			}
		%>

	</body>
</html>


web.xml
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 	version="2.4">

	<servlet>
		<servlet-name>Kaptcha</servlet-name>
		<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>

		<!--
			For a complete list of Init Parameters, please see:
		 http://code.google.com/p/kaptcha/wiki/ConfigParameters 		-->
		<init-param>
			<param-name>kaptcha.border</param-name>
			<param-value>no</param-value>
		</init-param>

		<init-param>
			<param-name>kaptcha.textproducer.font.color</param-name>
			<param-value>black</param-value>
		</init-param>

		<init-param>
			<param-name>kaptcha.textproducer.char.space</param-name>
			<param-value>5</param-value>
		</init-param>

	</servlet>

	<servlet-mapping>
		<servlet-name>Kaptcha</servlet-name>
		<url-pattern>/Kaptcha.jpg</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>KaptchaExample.jsp</welcome-file>
	</welcome-file-list>
</web-app>


先看jsp文件:

其他都是废话,就看这一行:<td><img src="Kaptcha.jpg"></td>

这行指定了验证码的资源是Kaptcha.jpg这个图片,Kaptcha.jpg这个图片在哪呢,再来看web.xml文件

有一行是这样的:<url-pattern>/Kaptcha.jpg</url-pattern>

那就说明Kaptcha.jpg不是一张图片,而是一个servlet的映射,而这个Servet的任务应该就是生成一张图片把。

顺藤摸瓜,找对应的servlet-name -再找servlet-name对应的servlet-class 原来是com.google.code.kaptcha.servlet.KaptchaServlet这个Servlet做的

至于他做了一些什么,怎么做了,我才懒得去管,我只要知道他能帮我生成一张图片就对了。

那么图片如何验证的呢?

jsp页面访问的时候的最后一行是:

Parameter: null ? Session Key: dc56m

这里显示的key好像和上面的验证码并不一样。多试了几次发现这里显示的是上次验证码的值。

再来看下jsp的源代码:

String c = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
String parm = (String) request.getParameter("kaptchafield");
这里的c就是获得的上一次验证码的值,而这个parm就是表单里面提交上去数据的信息,通过比较就能判断验证码是否正确了。

这下思路都清晰了,怎么使用kaptcha应该是很容易了。

在web.xml中复制以下内容到自己项目的web.xml文件中

<span style="white-space:pre">	</span><servlet>
		<servlet-name>Kaptcha</servlet-name>
		<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>

		<!--
			For a complete list of Init Parameters, please see:
		 http://code.google.com/p/kaptcha/wiki/ConfigParameters 		-->
		<init-param>
			<param-name>kaptcha.border</param-name>
			<param-value>no</param-value>
		</init-param>

		<init-param>
			<param-name>kaptcha.textproducer.font.color</param-name>
			<param-value>black</param-value>
		</init-param>

		<init-param>
			<param-name>kaptcha.textproducer.char.space</param-name>
			<param-value>5</param-value>
		</init-param>

	</servlet>

	<servlet-mapping>
		<servlet-name>Kaptcha</servlet-name>
		<url-pattern>/Kaptcha.jpg</url-pattern>
	</servlet-mapping>


这样访问Kaptcha.jpg的时候就能够访问到jar包中的servlet了;

然后是jsp中,将需要用到验证码的地方设置<img src="Kaptcha.jpg"/>

在servlet中,验证一下

String c = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
String parm = (String) request.getParameter("kaptchafield");
c与parm是否相同就行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: