package com.mweb.user.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.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 生成图形验证码的Servlet
*/
public class ImageCodeMakerServlet extends HttpServlet
{
@Override
public void init(ServletConfig config) throws ServletException
{
// TODO Auto-generated method stub
super.init(config);
}
/**
*
*/
private static final long serialVersionUID = -8924942016876830055L;
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
doPost(req, resp);
}
/**
* @see javax.servlet.http.HttpServlet#void
* (javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
*/
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
// 首先设置页面不缓存
resp.setHeader("Pragma", "No-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
// 定义图片的宽度和高度
int width = 90, height = 40;
// 创建一个图像对象
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 得到图像的环境对象
Graphics g = image.createGraphics();
Random random = new Random();
// 用随机颜色填充图像背景
g.setColor(getRandColor(180, 250));
g.fillRect(0, 0, width, height);
for (int i = 0; i < 5; i++)
{
g.setColor(getRandColor(50, 100));
int x = random.nextInt(width);
int y = random.nextInt(height);
g.drawOval(x, y, 4, 4);
}
// 设置字体,下面准备画随机数
g.setFont(new Font("", Font.PLAIN, 40));
// 随机数字符串
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(80), 20 + random
.nextInt(100), 20 + random.nextInt(90)));
// 将随机数字画在图像上
g.drawString(rand, (17 + random.nextInt(3)) * i + 8, 34);
// 生成干扰线
for (int k = 0; k < 12; k++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(9);
int yl = random.nextInt(9);
g.drawLine(x, y, x + xl, y + yl);
}
}
// 将生成的随机数字字符串写入Session
req.getSession().setAttribute("randcode", sRand);
// 使图像生效
g.dispose();
// 输出图像到页面
ImageIO.write(image, "JPEG", resp.getOutputStream());
}
/**
* 产生一个随机的颜色
*
* @param fc
* 颜色分量最小值
* @param bc
* 颜色分量最大值
* @return
*/
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);
}
}
分享到:
相关推荐
使用jsp/java-ee编程,页面提交后处理的servlet产生页面验证码。表单页面产生验证码。只有servlet文件。
验证码是指在用户注册、登录、评论等操作时,系统生成的一串随机字符或者图片,以防止机器人恶意攻击和垃圾信息的产生。本文将详细介绍 Java Servlet 验证码生成机制的实现过程。 验证码生成机制 验证码生成机制的...
servlet 验证码用于注册时自动产生验证码
- 使用`javax.servlet.http.HttpSessionBindingListener`接口实现Session监听,当验证码过期或被替换时,自动移除旧的验证码。 - 对于高并发场景,可以考虑使用分布式Session存储,如Redis,以解决单台服务器Session...
Java后端产生验证码后台验证功能的实现代码 Java后端产生验证码后台验证功能的实现代码是指在Java后台生成验证码,并对其进行后台验证的功能。本文主要介绍了Java后台产生验证码后台验证功能的实现代码,结合实例...
首先,验证码的生成通常涉及到随机字符的产生和图像的绘制。在JSP中,我们可以使用Java的`java.util.Random`类来生成随机数字和字母,然后结合`java.awt`和`javax.imageio`包中的类来创建图像并写入这些随机字符。`...
生成验证码的源代码。由servlet生成验证码和...能够产生验证码但是如何传输和验证呢,一般是传回服务器在action里做验证。 我还是喜欢js页面产生验证码,因为简单,虽然效果差了点。所以也附带了个js生成验证码的例子。
- **随机性**:为了防止被破解,验证码通常使用随机算法生成,确保每次请求都产生不同的验证码。 - **图像处理**:生成的验证码字符串需要转换为图像,这可能涉及到字体、颜色、背景、扭曲和噪声的处理,以增加识别...
jsp 验证码生成和刷新详解 jsp 验证码生成和刷新是 Web 开发中非常重要的一部分。...通过使用 servlet 生成验证码、配置 servlet、显示验证码、验证验证码和刷新验证码,我们可以防止机器人攻击和恶意注册。
图像的`src`属性指向一个Servlet,该Servlet负责生成并返回验证码图像。同时,将验证码值存入会话。 6. **用户输入验证**: 用户输入验证码后,前端会发送一个请求到服务器,此时服务器需要验证用户输入的验证码...
Java产生简单算术验证码图片,此为Servlet需要配置web.xml,配置方法如下: <servlet> <servlet-name>authimg</servlet-name> <servlet-class>img.AuthImg</servlet-class> </servlet> <servlet-mapping> ...
3、编写一个servlet,在servlet中产生图形验证码 ------------------------------------------------------------ //1、给客户端作出的回应是以图片的方式来回应 response.setContentType("image/jpeg"); ...
在本项目中,我们将探讨如何使用JSP(JavaServer Pages)和Servlet来实现随机生成的验证码功能。下面将详细阐述相关知识点。 首先,验证码的生成通常涉及到以下几个步骤: 1. **随机数字或字母生成**:验证码通常...
一个在登陆的时候产生验证码的类,可以根据需要转换成自己的action servlet 等 调用的部分可以用一个img 标签关联一个超连接就ok 了
这样既提高了用户体验,减少了网络请求的等待时间,又保证了每次验证的独立性,避免了因多人同时使用同一验证码而产生的安全问题。在实现时,需要在JavaScript中发送Ajax请求到服务器,服务器生成新的验证码并返回,...
定义图片的width、定义图片的height、定义图片上显示验证码的个数 创建字体,字体的大小应该根据图片的高度来定 ...随机产生的颜色将验证码绘制到图像中 四位数字的验证码保存到Session中 将图像输出到Servlet输出流中
在网页开发中,尤其是用户登录、注册、评论等场景,验证码能够有效地防止垃圾信息的产生,保护网站的安全。JSP(JavaServer Pages)作为服务器端的动态网页技术,可以方便地实现验证码的生成与验证。以下将详细介绍...
首先,`MD5`是一种广泛使用的加密散列函数,产生一个128位(16字节)的散列值,通常以32个十六进制数字的形式表示。在`MD5Java实现`中,开发者会使用Java的`java.security.MessageDigest`类来计算字符串的MD5值。...
但有时我们需要从不同的源获取数据,如API服务、第三方接口等,这就产生了跨域需求。为了解决这个问题,出现了多种解决方案,其中一种就是使用代理服务器。 代理服务器的基本思想是在客户端(浏览器)和目标服务器...
5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...