import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Result;
public class ImageResult implements Result {
public void execute(ActionInvocation invocation) throws Exception {
HttpServletResponse response = ServletActionContext.getResponse();
// 设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 设置图片的长宽
int width = 176, height = 30;
// 设置备选汉字,剔除一些不雅的汉字 这里只说明,省略具体汉字
String base = "\u7684\u4e00\u4e86\u662f\u6211 。。。省略汉字。。。;
// 备选汉字的长度
int length = base.length();
// 创建内存图像
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
Graphics g = image.getGraphics();
// 创建随机类的实例
Random random = new Random();
// 设定图像背景色(因为是做背景,所以偏淡)
g.setColor(getRandColor(random, 200, 250));
g.fillRect(0, 0, width, height);
// 备选字体
String[] fontTypes = { "\u5b8b\u4f53", "\u65b0\u5b8b\u4f53",
"\u9ed1\u4f53", "\u6977\u4f53", "\u96b6\u4e66" };
int fontTypesLength = fontTypes.length;
// 在图片背景上增加噪点
g.setColor(getRandColor(random, 160, 200));
g.setFont(new Font("Times New Roman", Font.PLAIN, 14));
for (int i = 0; i < 6; i++) {
g.drawString("*********************************************", 0,
5 * (i + 2));
}
// 取随机产生的认证码(6个汉字)
// 保存生成的汉字字符串
String sRand = "";
for (int i = 0; i < 6; i++) {
int start = random.nextInt(length);
String rand = base.substring(start, start + 1);
sRand += rand;
// 设置字体的颜色
g.setColor(getRandColor(random, 10, 150));
// 设置字体
g.setFont(new Font(fontTypes[random.nextInt(fontTypesLength)],
Font.BOLD, 18 + random.nextInt(6)));
// 将此汉字画到图片上
g.drawString(rand, 24 * i + 10 + random.nextInt(8), 24);
}
// 将认证码存入session
// 将认证码存入SESSION
ServletActionContext.getRequest().getSession().setAttribute("rand",
sRand);
g.dispose();
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
}
// 生成随机颜色
Color getRandColor(Random random, int fc, int bc) {
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);
}
}
相关推荐
java生成验证码源码包括彩色验证码 包括jsp生成验证码和彩色验证码
彩色验证码的实现是在生成验证码的基础上增加了颜色元素,使得验证码更难以被自动化工具识别,增强了安全性。 JSP是一种基于Java的服务器端脚本语言,用于创建动态网页。在本项目中,`code.jsp`是核心页面,它负责...
1. **随机生成验证码**:首先,我们需要创建一个包含随机字符的字符串作为验证码。这些字符可以是字母、数字或者是两者混合。通常,验证码的长度为4到6个字符。在JSP中,我们可以使用`java.util.Random`类来生成...
- **安全性**:可以考虑使用更复杂的算法生成验证码,如汉字、自定义图形等,提高机器识别的难度。 - **用户体验**:减少动画帧数,避免过于复杂的干扰元素,确保验证码清晰易读。 - **可配置性**:允许开发者...
- **使用`<jsp:include>`标签**:将生成验证码的Java代码包含到JSP页面中。 - **`<img>`标签**:生成的验证码图片以HTTP响应的方式返回,通过`<img>`标签显示在网页上。 - **session管理**:使用`session....
本代码用了JAVA JSP,是一个简间的自动生成验证码,很适合初学者学
// 生成验证码逻辑 String captchaCode = generateCaptchaCode(); session.setAttribute("captcha", captchaCode); // 将验证码绘制为图像并输出 byte[] imageBytes = drawCaptchaImage(captchaCode); ...
5. **存储验证码**:在生成验证码后,我们需要将其值存储在服务器的会话(session)中,以便稍后验证用户输入时进行比较。 6. **输出图像**:最后,JSP将生成的图像作为HTTP响应的一部分发送给客户端浏览器,同时在...
生成四种样式的图片验证码 部署在web容器内,将web.xml,及index.jsp放入指定位置,启动后,即可看到效果。
一个登录验证生成验证码用struts 后台生成验证码在jsp页面输出生成图片
本话题将深入探讨如何使用Java Server Pages (JSP)来生成数字形式的随机验证码,并实现图片化显示及刷新功能。 首先,我们需要理解JSP的基本原理。JSP是一种动态网页技术,它允许开发人员在HTML页面中嵌入Java代码...
JSP 生成随机验证码图片(经典老代码)
本篇内容主要介绍了如何使用Java Server Pages (JSP)来生成彩色的汉字验证码。通过自定义颜色、字体以及添加干扰线等技术手段,可以有效提升验证码的安全性和用户体验。 #### 三、关键技术点解析 ##### 1. 设置...
采用jsp 生成验证码,我自己使用过的。使用方法: <img src="./../function/imagejsp.jsp" style="float: left">
- 创建一个Servlet,处理HTTP请求,生成验证码,将其保存在session中,并返回验证码图片的二进制数据。 - 验证用户输入时,从session中获取原始验证码字符串进行比较。 5. **ajax无刷新验证码**: - 使用...
验证码是Web应用中常用的一种安全机制,用于防止自动化的机器人或者恶意软件进行非法操作,...这就是"java生成验证码代码"的基本原理和实现流程。通过这种方式,我们可以为Web应用提供一个简单但有效的安全防护措施。
本项目“Jsp-color-code.rar”关注的是使用Java和JSP技术生成彩色汉字验证码,这涉及到多个关键知识点,下面将详细阐述。 首先,Java验证码的实现通常基于Servlet和JSP技术。Servlet是Java服务器端编程的基础,可以...
"jsp生成验证码很好的例子"这个标题暗示我们将探讨如何使用JavaServer Pages(JSP)技术来创建一个有效的验证码系统。 首先,验证码的生成过程包括以下几个步骤: 1. **随机字符生成**:验证码通常由一组随机的...
1. **随机生成验证码**:首先,我们需要创建一个函数,它能生成一个随机的字符串,长度通常为4-6位。这个字符串可以包含大小写字母和数字。可以使用Java的`Random`类和`StringBuilder`来实现。 2. **绘制图片**:...