我们可以先定义一个servlet:因为我们要把生成都验证码保存到session里面,在servlet里面较方便当然也可以在jsp里面生成。
package com.zchen.util;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*;
public class AuthImg extends HttpServlet
{
//定义图形验证码中绘制字符的字体
private final Font mFont =
new Font("Arial Black", Font.PLAIN, 16);
//定义图形验证码的大小
private final int IMG_WIDTH = 100;
private final int IMG_HEIGTH = 18;
//定义一个获取随机颜色的方法
private Color getRandColor(int fc,int bc)
{
Random random = new Random();
if(fc > 255) fc = 255;
if(bc > 255) bc=255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
//得到随机颜色
return new Color(r , g , b);
}
//重写service方法,生成对客户端的响应
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
//设置禁止缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
BufferedImage image = new BufferedImage
(IMG_WIDTH , IMG_HEIGTH , BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200 , 250));
//填充背景色
g.fillRect(1, 1, IMG_WIDTH - 1, IMG_HEIGTH - 1);
//为图形验证码绘制边框
g.setColor(new Color(102 , 102 , 102));
g.drawRect(0, 0, IMG_WIDTH - 1, IMG_HEIGTH - 1);
g.setColor(getRandColor(160,200));
//生成随机干扰线
for (int i = 0 ; i < 80 ; i++)
{
int x = random.nextInt(IMG_WIDTH - 1);
int y = random.nextInt(IMG_HEIGTH - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g.drawLine(x , y , x + xl , y + yl);
}
g.setColor(getRandColor(160,200));
//生成随机干扰线
for (int i = 0 ; i < 80 ; i++)
{
int x = random.nextInt(IMG_WIDTH - 1);
int y = random.nextInt(IMG_HEIGTH - 1);
int xl = random.nextInt(12) + 1;
int yl = random.nextInt(6) + 1;
g.drawLine(x , y , x - xl , y - yl);
}
//设置绘制字符的字体
g.setFont(mFont);
//用于保存系统生成的随机字符串
String sRand = "";
for (int i = 0 ; i < 6 ; i++)
{
String tmp = getRandomChar();
sRand += tmp;
//获取随机颜色
g.setColor(new Color(20 + random.nextInt(110)
,20 + random.nextInt(110)
,20 + random.nextInt(110)));
//在图片上绘制系统生成的随机字符
g.drawString(tmp , 15 * i + 10,15);
}
//获取HttpSesssion对象
HttpSession session = request.getSession(true);
//将随机字符串放入HttpSesssion对象中
session.setAttribute("rand" , sRand);
g.dispose();
//向输出流中输出图片
ImageIO.write(image, "JPEG", response.getOutputStream());
}
//定义获取随机字符串方法
private String getRandomChar()
{
//生成一个0、1、2的随机数字
int rand = (int)Math.round(Math.random() * 2);
long itmp = 0;
char ctmp = '\u0000';
switch (rand)
{
//生成大写字母
case 1:
itmp = Math.round(Math.random() * 25 + 65);
ctmp = (char)itmp;
return String.valueOf(ctmp);
//生成小写字母
case 2:
itmp = Math.round(Math.random() * 25 + 97);
ctmp = (char)itmp;
return String.valueOf(ctmp);
//生成数字
default :
itmp = Math.round(Math.random() * 9);
return itmp + "";
}
}
}
2.创建一个jsp文件定义一个表单。
<body>
<form action="servlet/YanZheng" method="post">
验证码:<input type="text" name="yanzhengma">
<img name="d" src="<%=basePath %>/servlet/AuthImg">
<input type="submit">
</form>
</body>
</body>
说明:input标签就是我们输入的验证码。<img >标签就是servlet自动帮我们生成的图形验证码。
但我们怎么讲验证码显示出来呢?
当创建AuthImg servlet的时候eclipse会自动帮我们在web.xml文件中配置映射路径所以<img src="--">就是这个路径。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd">
<servlet>
<servlet-name>AuthImg</servlet-name>
<servlet-class>com.zchen.util.AuthImg</servlet-class>
</servlet>
<servlet>
<servlet-name>YanZheng</servlet-name>
<servlet-class>com.zchen.util.YanZheng</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AuthImg</servlet-name>
<url-pattern>/servlet/AuthImg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>YanZheng</servlet-name>
<url-pattern>/servlet/YanZheng</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.在YanZheng servlet里面取值:
1>取得自动生成的图形码:(String)request.getSession().getAttribute("rand");
2>取得我们输入的验证码:(String)request.getParameter("yanzhengma");
判断即可;
分享到:
相关推荐
验证码生成工具类是一种在Web应用中广泛使用的安全机制,它主要用于防止自动化的恶意操作,比如机器人注册、垃圾邮件发送等。这个工具类是用Java语言编写的,因此我们可以深入探讨一下Java验证码生成的相关技术和...
易语言简单验证码生成和识别源码,简单验证码生成和识别,生成随机验证码,比对文本子程序
这个“简单验证码生成jar包”提供了一个便捷的解决方案,帮助开发者在他们的应用中集成验证码功能。一个`.jar`文件是Java应用程序的归档文件,它可以包含代码、资源文件和元数据。`code_kyle_1.1.jar`很可能是这个...
验证码生成类大全是一种用于网络安全验证的重要工具,它主要用于防止恶意自动化程序(如机器人)进行非法操作,例如批量注册、刷票或数据抓取。在Web应用中,验证码通常需要用户在提交表单前输入图像上显示的一串...
在本文中,我们将深入探讨验证码的工作原理,以及如何使用编程技术来实现一个图片验证码生成器。 验证码的主要目标是防止自动化程序(如机器人或爬虫)进行恶意操作,如批量注册、刷票或垃圾邮件发送。它们通过要求...
总之,C#提供了丰富的图形和字符串处理功能,使得我们可以方便地实现具有噪音线和扭曲字体的验证码生成与验证。在实际开发中,我们还可以考虑加入更多的安全措施,如限制同一IP的尝试次数,或者使用更复杂的验证码...
易语言源码易语言简单验证码生成和识别源码.rar 易语言源码易语言简单验证码生成和识别源码.rar 易语言源码易语言简单验证码生成和识别源码.rar 易语言源码易语言简单验证码生成和识别源码.rar 易语言源码易语言...
这篇博客文章“java验证码生成类”提供了一个简单的示例,下面我们将深入探讨验证码生成的相关知识点。 首先,验证码的基本原理是生成一段随机的、难以由机器识别的文字或数字序列,然后要求用户在限定时间内输入这...
本项目着重于JSP页面上的验证码生成,结合后台Java代码,提供了一个完整的解决方案。 首先,验证码的核心在于其随机性和不可预测性。在JSP页面上,通常会有一个专门的图片元素显示验证码。这个图片是由服务器动态...
该简单的验证码生成程序能够满足基本的安全需求,具有较强的可移植性和灵活性。通过设置合理的参数,可以在不同场景下进行适配。同时,通过自定义字符集和图形样式,可以进一步提高其安全性和用户体验。 值得注意的...
在Java开发中,JCaptcha是一个广泛使用的开源库,它提供了一种简单且灵活的方式来生成和验证这种人机验证图像。 1. **什么是JCaptcha?** JCaptcha,全称为Java CAPTCHA,是由Greg Wilkins创建的一个强大的验证码...
总结来说,“轻量级验证码生成工具”是一个实用的Java插件,它提供了多样化的样式和可扩展性,帮助开发者轻松地在他们的应用中实现安全的验证码功能。通过理解其工作原理和使用方法,开发者可以有效地提升应用程序的...
总的来说,验证码生成是一个结合了随机数生成、图像处理和安全策略的综合技术。理解其原理并能够根据需求实现各种类型的验证码,是提高网站安全性的重要技能。在开发过程中,需要不断权衡用户体验与安全性的平衡,...
Jcaptcha(Java 验证码生成框架)使用说明 一、框架概述 Jcaptcha 是一个 Java 验证码生成框架,提供了详细的说明及例程,通过调查实践后,总结的,希望对大家有帮助。该框架提供了生成验证码图像通用解决办法,...
本文将详细介绍如何使用C#自动生成Web图形验证码,以及提供一个简单的5位数字验证码生成示例。 首先,理解验证码的基本概念:验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and...
下面我们将深入探讨如何使用JavaScript实现验证码生成。 首先,验证码的基本原理是创建一组随机字符,通常是数字和字母的组合,然后将其显示给用户,让用户输入以验证其身份。在JavaScript中,我们可以利用Math对象...
在Python中创建一个简单的验证码生成器是很容易的,这涉及到图像处理、字体处理和随机数生成等技术。以下将详细介绍如何利用Python实现这一功能。 首先,我们需要安装一些必要的库。`PIL`(Python Imaging Library...
易语言简单验证码生成和识别源码例程程序结合易语言扩展界面支持库和位图操作支持库,实现简单的验证码生成和识别。点评:本源码演示了验证码假单的生成和识别,以供参考。资源作者:。@易语言源码网。资源下载:。