1.图文验证码的原理
3.测试验证码
在servlet中随机生成一个指定位置的验证码,一般为四位,然后把该验证码保存到session中.在通过Java的绘图类以图片的形式输出该验证码。为了增加验证码的安全级别,可以输出图片的同时输出干扰线,最后在用户提交数据的时候,在服务器端将用户提交的验证码和Session保存的验证码进行比较。
2.验证码所需的技术
i.因为验证码中的文字,数字,应为都是可变的,故要用到随机生成数技术。
ii.如果验证码中包含汉字,则要用到汉字生成技术.
iii.可以使用Ajax技术实现局部刷新
iv.可以使用图片的缩放和旋转技术,
vi.随机绘制干扰线(可以是折现,直线等)
vii.如果考虑到验证码的安全性,可以使用MD5加密.
验证码模块实例
1.编写生成英文,数字,汉字随机生成的Servlet类.源代码如下:
2.配置Servlet
在web.xml中的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<servlet>
<description>输出验证码</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>PictureCheckCode</servlet-name>
<servlet-class>com.servlet.PictureCheckCode</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PictureCheckCode</servlet-name>
<url-pattern>/picturecheckcode</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.测试验证码
可以编写JSP页面来验证是否可以输出验证码图片,JSP代码如下:
1.index.jsp:显示界面
- <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>验证码</title>
- <script language="javascript">
- function myReload() {
- document.getElementById("CreateCheckCode").src = document
- .getElementById("CreateCheckCode").src
- + "?nocache=" + new Date().getTime();
- }
- </script>
- </head>
- <body>
- <form action="Check.jsp" method="post">
- <input name="checkCode" type="text" id="checkCode" title="验证码区分大小写"
- size="8" ,maxlength="4" />
- <img src="PictureCheckCode" id="CreateCheckCode" align="middle">
- <a href="" οnclick="myReload()"> 看不清,换一个</a>
- <input type="submit" value="提交" />
- </form>
- </body>
- </html>
2.Check.jsp :主要验证提交的数据是否和Session中保存的验证码是否相同
- <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
- <html>
- <head>
- <title>验证码校验</title>
- </head>
- <body>
- <%
- String checkcode=request.getParameter("checkCode");
- if(checkcode.equals("")||checkcode==null){
- out.print("<script>alert('请输入验证码');window.location.href('index.jsp')</script>");
- }else{
- if(!checkcode.equalsIgnoreCase((String)session.getAttribute("randCheckCode"))){
- out.print("<script>alert('验证码不正确,请重新输入');history.back(-1);</script>");
- }else{
- out.print("登录成功");
- }
- }
- %>
- </body>
- </html>
3.工程项目结构,及运行截图