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>
分享到:
相关推荐
这段Java代码是一个生成验证码图像的程序,用于创建随机的、难以自动识别的字符序列,通常用于网站或应用程序的安全验证,防止机器人或自动化脚本进行恶意操作。验证码的主要目的是确保操作是由真实的人执行的,而...
在Web开发中,使用JSP(JavaServer Pages)来生成验证码图片是一种常见的方法。下面我们将详细讨论如何在JSP中实现验证码的生成。 首先,我们需要理解验证码的基本原理。验证码通常包含一串随机的字母和数字,有时...
7. **时间限制与唯一性**:验证码具有时效性,一旦生成,会在一段时间后失效,防止恶意用户反复尝试。同时,每个验证码只使用一次,增加安全性。 8. **用户验证**:用户输入的验证码字符串需要与服务器端保存的原始...
1. **随机生成验证码**:首先,我们需要创建一个函数,它能生成一个随机的字符串,长度通常为4-6位。这个字符串可以包含大小写字母和数字。可以使用Java的`Random`类和`StringBuilder`来实现。 2. **绘制图片**:...
1. **随机数据生成**:首先,服务器或客户端的JavaScript会生成一段随机字符串,作为验证码的正确答案。这个字符串可以包含字母、数字,甚至符号,以增加识别难度。 2. **图像处理**:随机字符串会被转化为图像。这...
以上就是关于"JavaWeb生成验证码程序"的关键知识点,掌握了这些,你就可以创建一个基本的验证码生成系统,有效地保护你的Web应用免受恶意自动化攻击。当然,实际项目中还需要根据具体需求进行调整和优化,以达到最佳...
2. 验证码的生命周期要管理好,确保一段时间后会话过期,避免被恶意用户利用。 3. 考虑使用更安全的验证码技术,如Google的reCAPTCHA,以提高安全性。 通过上述步骤,我们可以使用Servlet在Java Web应用中实现一个...
【易语言生成验证码图片源码】是一个用于在易语言编程环境中创建验证码图片的源代码资源。易语言,全称为“易学易用编程语言”,是中国自主研发的一种简单易学的编程工具,旨在降低编程门槛,让普通用户也能进行软件...
1. 图片验证码:服务器生成的验证码图片,通过wx.getImageInfo接口获取图片base64编码,然后在小程序中显示。 2. 滑动验证码或点击验证码:服务器返回的JSON数据包含验证码的初始状态和目标状态,利用小程序的canvas...
在Servlet中生成图片验证码,首先需要创建一个Servlet类,该类将负责生成随机字符串并将其转化为图像。以下是一些关键步骤: 1. **生成随机字符串**:使用`java.util.Random`和`char[]`数组来创建一个指定长度的...
这个“随机生成验证码工具jar包”是一个Java编写的程序库,它能够帮助开发者快速地在他们的应用中集成验证码功能。让我们深入了解一下这个jar包以及与之相关的Java和jar文件的知识。 首先,Java是一个广泛使用的...
使用Java Servlet来生成验证码图片是一种常见的实现方式。本文将详细介绍如何通过servlet生成验证码图片,并解释其背后的技术原理。 #### 二、技术背景 1. **Servlet简介**: - Servlet是一种基于Java的技术,用于...
DLL文件允许多个应用程序共享同一段代码,从而节省内存并提高效率。在这个案例中,IdentifyingCode.dll很可能是实现验证码生成、显示和验证功能的模块,可能包括了随机字符串生成、字符扭曲、背景杂讯添加等图像...
本教程将深入讲解如何使用JSP来生成彩色的验证码程序。 一、验证码的基本原理 验证码的主要目的是通过要求用户输入图片上显示的一串随机字符,来验证用户是人而非机器。这些字符通常是扭曲的,以便增加机器识别的...
1. **随机字符串生成**:验证码的核心是生成一段随机的字母或数字序列,通常为4到6位。在JSP中,可以使用`java.util.Random`类和`String`的`format`方法来创建这样的序列。 2. **图像创建**:为了使验证码难以被...
在Web应用程序中,验证码是一种常用的防止机器人或恶意用户自动操作的安全机制。Servlet生成动态验证码涉及到的主要知识点包括Servlet生命周期、HTTP请求响应流程、图像处理以及随机数生成。 1. Servlet生命周期: ...
5. **安全存储和验证**:服务器需要安全地存储生成的验证码,以便在用户提交输入时进行验证,并在一段时间后删除以保证安全。 在实际开发中,验证码还需要考虑用户体验,比如生成的验证码应易于人类辨认但难于机器...
Java 通过 JCaptcha 生成验证码是一项常见的安全技术,用于防止自动化程序(如机器人)非法访问或操作网站。验证码,全称“全自动区分计算机和人类的图灵测试”,是一种验证用户是否为人类的方法。在此,我们将深入...
此外,考虑到性能和用户体验,验证码的生命周期应适当设置,比如在一段时间无操作后自动过期。 5. **可用性和可访问性**:尽管验证码的主要目的是阻止自动化程序,但也要确保对人类用户友好。成语验证码可能会对非...
它通过显示一段随机生成的文字或数字,要求用户输入以验证其为真实的人类用户。在这个JSP程序中,我们可能会看到以下关键知识点: 1. **颜色处理**:彩色验证码通常会用多种颜色来增加机器识别的难度。在JSP中,...