package com.javaee.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 动态验证码的生成
*
* @author George
*
*/
public class ImageServlet extends HttpServlet {
public 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);
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 在内存中创建图象
int width = 60, 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.PLAIN, 18));
// 画边框
// g.setColor(new Color());
// g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 155; 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);
}
// 取随机产生的认证码(4位数字)
String sRand = "";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
// 将认证码显示到图象中
g.setColor(new Color(20 + random.nextInt(110), 20 + random
.nextInt(110), 20 + random.nextInt(110))); // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand, 13 * i + 6, 16);
}
// 将认证码存入SESSION
// session.setAttribute("rand", sRand);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
}
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(arg0, arg1);
}
}
分享到:
相关推荐
项目概述:动态验证码生成源码,旨在提升团队激励与沟通效率。 核心技术:本项目主要采用Python语言进行开发,同时结合HTML和CSS技术,实现了一套功能完善的动态验证码生成系统。 文件结构:项目包含65个文件,...
基于 PHP 的中文 GIF 动态验证码生成器的设计与实现 本文介绍了基于 PHP 的中文 GIF 动态验证码生成器的设计与实现,旨在解决当前验证码生成器安全性较弱的问题。文章首先介绍了验证码的概念和当前验证码生成器的...
动态验证码生成器 可生成4位或6位验证码 即可纯数字,也可中英混合。 可用于邮件验证时等的动态验证码。 动态验证码未有有效时间,需要此功能,请另写个线程监测验证码发出失效,若超过时间可释放验证码储存变量。 ...
Java实现动态验证码生成
本文主要探讨如何使用Servlet技术来模仿CSDN网站的动态验证码生成过程,其中包括数字和字母的组合,以及加减乘三种运算的实现。 首先,我们要理解Servlet的原理。Servlet是Java EE中的一种服务器端组件,用于扩展...
要生成动态验证码,首先需要在Servlet中创建一个`BufferedImage`对象,定义验证码的宽度和高度。然后,通过随机数生成器填充图像,可以绘制不同颜色的线条和字符,增加识别难度。使用`Random`类生成随机字符序列,...
通过阅读并理解`Example`中的代码,可以学习如何整合这些工具,创建出自己的动态验证码生成服务。 总的来说,生成C#的GIF动态验证码是一项结合了图像处理、动画和安全策略的技术任务。通过掌握这些技术,开发者可以...
在项目实例中,你可以找到一个完整的动态验证码生成器,它可能包含以下文件: - `config.php`: 配置文件,定义验证码的参数,如长度、字体、颜色等。 - `captcha.php`: 主要的验证码生成脚本,包含了上述的生成逻辑...
在Java开发中,生成动态GIF验证码是一种常见的安全机制,用于防止自动机器人或者恶意脚本对网站进行非法操作。这种验证码通常包含随机生成的字母、数字或者符号,以动画的形式展示,用户需要输入看到的验证码才能...
总的来说,生成动态验证码是提高Web应用安全性的重要手段。通过合理设计验证码的生成和验证逻辑,以及使用C#提供的强大工具,我们可以在保护用户账户安全的同时,提供良好的用户体验。对于开发者而言,掌握这一技术...
jsp生成动态验证码,jsp生成动态验证码。
验证码生成工具类是一种在Web应用中广泛使用的安全机制,它主要用于防止自动化的恶意操作,比如机器人注册、垃圾邮件发送等。这个工具类是用Java语言编写的,因此我们可以深入探讨一下Java验证码生成的相关技术和...
- JavaScript中,可以结合Canvas元素生成动态验证码,或者利用WebGL实现更复杂的3D验证码。 4. **验证码服务端与客户端交互**: - 生成验证码时,服务器端创建一个唯一的验证码值,并将其存储在会话(Session)中...
验证码是一种用于验证用户身份的安全机制,它通常由一组随机生成的字符或数字组成,...通过`getImg.java`和`getImg.jsp`这两个文件,我们可以实现一套完整的动态验证码生成和验证系统,为Web应用提供基础的安全保障。
二、动态验证码生成 1. **生成随机字符串**:首先,我们需要创建一个随机的字符串作为验证码。通常这个字符串包含字母和数字,长度可以自定,比如4位。我们可以利用Java的`Random`类和`StringBuilder`生成这个字符串...
JSP是Java的一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java代码,以便在服务器端处理数据并生成动态内容。在JSP中,我们可以通过使用脚本元素、指令和标签库来编写业务逻辑和展示层代码。 生成验证码的...
VC++验证码生成Base64验证码png图片程序,如何使用VC++生成验证码图片,输出Base64图片给网页调用
这个资料包为初学者提供了一个实践动态验证码生成的完整平台,通过学习和运行这些源码,可以深入了解Python图像处理、随机数生成、服务器交互等多个方面的重要技能,对于提升计算机大作业或毕业设计的实践能力具有很...
这个"图片验证码生成demo"是一个示例项目,用于演示如何创建这样的验证码系统。在本文中,我们将深入探讨验证码的工作原理,以及如何使用编程技术来实现一个图片验证码生成器。 验证码的主要目标是防止自动化程序...
在这个例子中,我们将深入探讨ASP.NET如何实现动态验证码的生成与验证。 首先,我们需要创建一个验证码类,这个类将负责生成随机的字符串和对应的图像。在.NET框架中,我们可以利用`Random`类生成随机数字,然后将...