package test;
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ImageGenerator extends HttpServlet {
private static final long serialVersionUID = -3938318741402322164L;
private static 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);
}
private static String charsLong = "23456789abcdefghjklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";
private static String charsShort = "0123456789";
private static String chars = charsLong;
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) {
try {
int charsLength = chars.length();
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
int width = 70, height = 20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
g.setFont(new Font("Times New Roman", Font.ITALIC, height));
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 35; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}
StringBuilder sRand = new StringBuilder();
String[] fontNames = { "Times New Roman", "Arial", "Book antiqua", "" };
for (int i = 0; i < 4; i++) {
g.setFont(new Font(fontNames[random.nextInt(3)], Font.ITALIC, height));
char rand = chars.charAt(random.nextInt(charsLength));
sRand.append(rand);
g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
g.drawString(String.valueOf(rand), 16 * i + random.nextInt(6) + 3, height - random.nextInt(4));
}
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 30; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(width);
int yl = random.nextInt(width);
g.drawLine(x, y, x + xl, y + yl);
}
request.getSession().setAttribute("Login_Image_Code", sRand.toString());
g.dispose();
try {
Thread.sleep(100);
} catch (Exception ex) { }
OutputStream os = response.getOutputStream();
ImageIO.write(image, "JPEG", os);
os.flush();
os.close();
} catch (Exception ex) { }
}
}
修改 web.xml:
<servlet>
<servlet-name>imageGenerator</servlet-name>
<servlet-class>test.ImageGenerator</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>imageGenerator</servlet-name>
<url-pattern>/image.jsp</url-pattern>
</servlet-mapping>
转自:http://www.javaeedev.com/blog/article.jspx?articleId=ff808081198fb524011999d714b0066f
分享到:
相关推荐
Java作为一门广泛使用的服务器端编程语言,提供了丰富的功能来生成图片验证码。本篇将深入讲解如何使用Java Servlet来实现这一过程。 首先,我们来看标题"java生成图片验证码"。这个标题暗示我们将探讨的是在Java...
在本主题“利用jsp生成图片验证码”中,我们将探讨如何在JavaServer Pages (JSP)上下文中创建一个简单的图片验证码,而无需使用Servlet。首先,我们要明白JSP是Java Web开发中的视图层技术,它允许我们在HTML页面中...
### ASP.NET生成图片验证码知识点详解 #### 一、概述 在Web应用开发中,验证码是一种常见的安全措施,用于区分操作者是人还是自动化程序。本文将详细介绍如何在ASP.NET环境中生成图片验证码,包括代码实现与关键...
PHP快速生成图片验证码并且实现验证插件 1.插件作用: 本插件可以快速实现网站验证码功能,包括验证码的生成和验证。 2.所需参数: CaptchaTool类包括两个方法,generate方法可以实现生成'...
该资源是谷歌 kaptcha jar包,以及该jar包的使用说明,这是谷歌自动生成图片验证码,大大节省的开发时间,用起来比较简单,已过时,但仍然可以使用,喜欢的小伙伴就下载吧,有什么不懂的地方可以咨询博主。
在这个场景中,我们使用Servlet来生成图片验证码,这是一种防止恶意自动化程序(如机器人)进行非法操作的安全机制。验证码通常是一串随机生成的字符,以图像形式显示,用户需要在输入框中正确输入才能完成验证。 ...
JSP生成图片验证码.txtJSP生成图片验证码.txtJSP生成图片验证码.txtJSP生成图片验证码.txtJSP生成图片验证码.txt
Android实现随机生成图片验证码的示例程序,直接构建运行,代码文件简单易参考 Android实现随机生成图片验证码的示例程序,直接构建运行,代码文件简单易参考 Android实现随机生成图片验证码的示例程序,直接构建...
本示例将详细介绍如何使用.NET框架下的C#语言,结合imageProcessing.dll库,快速生成图片验证码。 首先,我们要了解imageProcessing.dll库。这是一个专门为C#开发者设计的图像处理库,提供了丰富的图像操作函数,如...
动态生成图片验证码的目的是防止自动化程序(如爬虫或恶意脚本)自动填写表单,从而提高网站的安全性。 在Servlet中生成图片验证码,首先需要创建一个Servlet类,该类将负责生成随机字符串并将其转化为图像。以下是...
在IT领域,验证码(CAPTCHA)是一...在提供的压缩包文件“图片验证码生成”中,可能包含了实现上述功能的源代码示例,你可以通过学习和理解这些代码,加深对Java生成图片验证码的理解,并根据实际需求进行调整和优化。
使用示例,请自行修改代码以适应你的页面: 提交页from.asp '如果验证码为空或者验证码不...调用页main.asp,点击图片更换验证码 <script language=javascript>document.write("(); alt=看不清楚/>"); 提交" />
在本主题中,我们将深入探讨如何使用Java来生成图片验证码。Java生成图片验证码的过程涉及图像处理、随机数生成以及字符串编码等多个知识点。 首先,验证码的核心是生成一个随机的字符串,通常包含字母和数字。在...
生成图片验证码涉及到以下几个关键知识点: 1. **服务器端代码**:通常使用ASP.NET的代码-behind(如C#或VB.NET)来编写生成验证码的逻辑。这包括生成随机字符串、绘制图片以及添加噪音线和点以增加识别难度。 2. ...
在"使用Servlet生成图片验证码"这个主题中,我们首先会创建一个Servlet来生成随机的字母和数字组合,通常包含4到6位。这可以通过Java的Random类和Character类来实现。验证码生成后,将其保存在服务器的内存中,以便...
源码提供了一个生成图片验证码的工具类,适用于各种需要验证码的场景,如用户注册、登录等。该工具类使用随机字符生成验证码,并支持自定义验证码长度和字体样式。生成的验证码图片背景透明,线条清晰,可轻松辨认。...
本教程将聚焦于PHP如何生成图片验证码,这对于Web开发人员来说是一项基本技能。 首先,我们需要理解验证码的基本原理。验证码通常包含随机生成的一串字符,这些字符可能是字母、数字或者两者的组合,有时还会包含...
PHP生成图片验证码技术详解 PHP 生成图片验证码是 Web 开发中常用的安全机制,用来防止机器人程序的恶意攻击。下面我们将详细介绍 PHP 生成图片验证码的技术实现。 session_start() 函数 在 PHP 中,session_...
在IT领域,生成图片验证码(CAPTCHA)是一种广泛使用的安全技术,用于防止自动化程序(如机器人)进行恶意操作。在本教程中,我们将探讨如何使用Python来生成中文图片验证码。这个过程涉及到图像处理、随机字符生成...
总结来说,使用JSP生成图片验证码涉及到以下几个关键点:生成随机字符串、存储验证码、绘制并输出图片以及设置HTTP响应类型。这种方法简单易用,但要注意,对于高级的自动化攻击,可能需要更复杂的验证码解决方案,...