package com.itcast.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
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;
public class ValidatePhotoServlet extends HttpServlet {
private final int WIDTH = 100;
private final int HEIGHT = 30;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
BufferedImage image = new BufferedImage(WIDTH, HEIGHT,
BufferedImage.TYPE_INT_RGB);// 获得一个图片对象
Graphics g = image.getGraphics();
// 设置背景色
setBackground(g);
// 设置边框
setBorder(g);
// 画干扰线
drawLine(g);
// 写随机数
drawrandom((Graphics2D) g);
// 画图
response.setContentType("image/jpeg");
ImageIO.write(image, "jpeg", response.getOutputStream());
response.setDateHeader("Expries", -1);// 设置没有缓存
response.setHeader("Cache_Control", "no_cache");
}
private void drawrandom(Graphics2D g) {
g.setColor(Color.RED);
g.setFont(new Font("宋体", Font.BOLD, 20));// 设置字体的格式
String base = "\u7684\u4e00\u4e80";// unicode码,用来生成汉字
int x = 5;
for (int i = 0; i < 5; i++) {
int degree = new Random().nextInt() % 30;// 这个是生成-30-30
String ch = (base.charAt(new Random().nextInt(base.length() - 1)) + "");// 随机获得汉字
g.rotate(degree * Math.PI / 180, x, 20);// degree * Math.PI /
// 180旋转的弧度 绕着这个点旋转 x, 20
g.drawString(ch, x, 20);// 把字写进去,Y不变,x每次加20
g.rotate(-degree * Math.PI / 180, x, 20);// 旋转回来,为下一个汉字旋转做准备
x = x + 20;
}
}
private void drawLine(Graphics g) {
g.setColor(Color.GREEN);
for (int i = 0; i < 5; i++) {
int x1 = new Random().nextInt(WIDTH);
int x2 = new Random().nextInt(WIDTH);
int y1 = new Random().nextInt(HEIGHT);
int y2 = new Random().nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}
private void setBorder(Graphics g) {
g.setColor(Color.BLUE);
g.drawRect(1, 1, WIDTH - 2, HEIGHT - 2);
}
private void setBackground(Graphics g) {
g.setColor(Color.WHITE);// 设置画笔的颜色
g.drawRect(0, 0, WIDTH, HEIGHT);// 设置用画笔划出的矩形
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
实现图片换一张的关键script代码
<input type="text" /><img src="/day_confirm/servlet/ValidatePhotoServlet" alt="换一张" onclick="changeimage(this)"/>
<script type="text/javascript">
function changeimage(img){
img.src=img.src+"?"+new Date().getTime();
}
</script>
分享到:
相关推荐
在IT行业中,随机图片生成是一种常见的安全验证手段,特别是在用户注册、登录或其他敏感操作时,用来防止自动化的机器人或恶意脚本进行攻击。这个场景下,我们关注的是使用Servlet和Java图形界面编程来实现这一功能...
在ASP.NET中,生成随机验证码是一项常见的安全措施,主要用于防止自动化程序(如机器人)进行恶意操作,例如防止垃圾注册或防止投票刷票等。验证码通常表现为一张包含随机字符的图片,用户需要输入图片中显示的字符...
验证码通常由一串随机的字母和/或数字组成,显示在一张图片上,用户需要正确输入才能通过验证。下面我们将详细探讨如何在.NET中实现这个功能。 首先,验证码的生成过程包括以下几个步骤: 1. **随机生成验证码内容...
首先,随机图片验证码是一种基于图像的验证方式,它的核心思想是生成一串随机字符,并将这些字符以扭曲、旋转、加噪等方式显示在一张图片上,用户需要正确输入图片中显示的字符才能通过验证。这种方式增加了机器解析...
验证码图片生成器是一种用于网络安全验证的技术,主要用于防止自动化的机器人或恶意软件进行非法操作,如批量注册、恶意登录等。这个Java源码实现的验证码生成器具有易用性且适应性强,可以根据需求调整验证码的类型...
验证码通常包含一串随机生成的字母和数字,显示在一张图片上,用户需要输入看到的文字以证明他们不是计算机程序。这样,只有人类能够完成验证,而机器由于无法识别图片中的文本,因此无法自动完成任务。 在JSP...
验证码通常由一串随机生成的字母、数字组合而成,显示在一张图片上,并要求用户在输入框中输入相同的字符序列以证明其为人类。这样做是为了防止机器自动识别并输入验证码,增加自动化攻击的难度。 生成JSP图片...
2. **扭曲与变形**:生成的字符串会被绘制到一张图片上,但不是简单的直线显示,而是通过扭曲、倾斜、抖动、添加噪声、改变字体样式等手段,使得机器难以通过图像识别算法读取。 3. **颜色与背景**:为了进一步增加...
验证码通常包含一组随机生成的数字和/或字母,这些字符被绘制到一张图片上,然后展示给用户。用户需要输入他们看到的字符序列以证明他们是人而不是机器。这种机制增加了自动化程序解析和模仿验证码的难度。 该...
程序使用了`BufferedImage`类来创建一张图片,并使用`Graphics`对象在上面绘制文本和干扰元素。例如,文本是用黑色字体绘制的,而背景色则设置为灰色。此外,还添加了一些随机分布的小圆点作为干扰元素,以增加破解...
图片验证码会将这些字符以扭曲、变形、加噪等方式显示在一张图片上,用户需要正确识别并输入字符才能完成验证,从而证明自己是真人而非机器。 Python中实现这个功能,我们可以利用`PIL`(Python Imaging Library)...
- 在生成验证码时,服务器会从图像库中随机选择一张图片,然后将图片的某一部分遮挡(通常通过切割),形成两个图片部分:完整图像和遮挡后的图像。 4. **Java后端实现**: - 后端代码负责处理图片的生成、分割...
这个函数接受一个参数$len,表示生成字符串的长度,由字母和数字随机组合而成,保证了验证码的随机性和复杂度。 3. 图片验证码的绘制:使用GD库来创建一个指定宽度和高度的图片。GD库是PHP的一个用于处理图像的扩展...
总之,`ValidateCode.jar`包为Java开发者提供了一个方便的工具,用于快速实现图片验证码功能,而无需从头编写复杂的图像处理和随机生成逻辑。它的灵活性和易用性使得在实际项目中集成验证码变得简单高效。通过适当的...
HTTPHandler在此过程中负责生成验证码图片,包括随机字符的生成、颜色、字体和背景的设置等。 在实际开发中,我们可以创建一个专门处理验证码请求的HTTPHandler,例如`VerifyCode.ashx`。这个处理器会根据请求生成...
- 使用JavaScript和Ajax技术,当用户点击“换一张”按钮时,发送异步请求到服务器获取新的验证码,无需刷新整个页面。 - 验证码的更新和验证都通过Ajax完成,提升用户体验。 6. **代码注释和操作方法**: - 为了...
通常,一个图片验证码会生成一组随机字符或数字,然后将它们扭曲、添加背景噪声、拼接图片等,形成一张难以被机器识别的图片。用户需要正确输入图片中的字符才能完成验证。 在Android开发中,实现这个功能可以分为...
- 使用`Math.random()`生成一个随机索引,根据这个索引从图片数组中取出一张图片,并设置为当前Activity的背景。 - 注意处理边界情况,确保随机索引的有效性,避免数组越界。 6. **优化与注意事项** - 考虑到...
ASP.NET 图片验证码是一种常用的网络安全措施,用于防止自动化的机器人或恶意软件进行非法操作,如批量注册、垃圾邮件发送等。...实际应用时,开发者需要根据项目需求和安全性要求,定制合适的验证码生成策略。
验证码是Web应用中常见的一种安全机制,用于防止自动化的机器人或者恶意用户进行非法操作,比如批量注册、频繁登录...通过以上步骤,我们可以实现在Spring框架中安全有效地生成和验证图片验证码,提高Web应用的安全性。