package action;
import com.opensymphony.xwork2.*;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.util.*;
import javax.imageio.ImageIO;
import javax.servlet.http.*;
import org.apache.struts2.interceptor.*;
public class ValidationCodeAction extends ActionSupport implements
ServletResponseAware, ServletRequestAware
{
private HttpServletRequest request;
private HttpServletResponse response;
public void setServletResponse(HttpServletResponse response)
{
this.response = response;
}
public void setServletRequest(HttpServletRequest request)
{
this.request = request;
}
// 图形验证码的字符集合,系统将随机从这个字符串中选择一些字符作为验证码
private String codeChars = "%#23456789abcdefghkmnpqrstuvwxyzABCDEFGHKLMNPQRSTUVWXYZ";
// 返回一个随机颜色(Color对象)
private Color getRandomColor(int minColor, int maxColor)
{
Random random = new Random();
// 保存minColor最大不会超过255
if (minColor > 255)
minColor = 255;
// 保存minColor最大不会超过255
if (maxColor > 255)
maxColor = 255;
// 获得红色的随机颜色值
int red = minColor + random.nextInt(maxColor - minColor);
// 获得绿色的随机颜色值
int green = minColor + random.nextInt(maxColor - minColor);
// 获得蓝色的随机颜色值
int blue = minColor + random.nextInt(maxColor - minColor);
return new Color(red, green, blue);
}
public String execute() throws Exception
{
// 获得验证码集合的长度
int charsLength = codeChars.length();
// 下面三条记录是关闭客户端浏览器的缓冲区
// 这三条语句都可以关闭浏览器的缓冲区,但是由于浏览器的版本不同,对这三条语句的支持也不同
// 因此,为了保险起见,建议同时使用这三条语句来关闭浏览器的缓冲区
response.setHeader("ragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 设置图形验证码的长和宽(图形的大小)
int width = 90, height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();// 获得用于输出文字的Graphics对象
Random random = new Random();
g.setColor(getRandomColor(180, 250));// 随机设置要填充的颜色
g.fillRect(0, 0, width, height);// 填充图形背景
// 设置初始字体
g.setFont(new Font("Times New Roman", Font.ITALIC, height));
g.setColor(getRandomColor(120, 180));// 随机设置字体颜色
// 用于保存最后随机生成的验证码
StringBuilder validationCode = new StringBuilder();
// 验证码的随机字体
String[] fontNames = { "Times New Roman", "Book antiqua", "Arial" };
// 随机生成3个到5个验证码
for (int i = 0; i < 3 + random.nextInt(3); i++)
{
// 随机设置当前验证码的字符的字体
g.setFont(new Font(fontNames[random.nextInt(3)], Font.ITALIC,
height));
// 随机获得当前验证码的字符
char codeChar = codeChars.charAt(random.nextInt(charsLength));
validationCode.append(codeChar);
// 随机设置当前验证码字符的颜色
g.setColor(getRandomColor(10, 100));
// 在图形上输出验证码字符,x和y都是随机生成的
g.drawString(String.valueOf(codeChar), 16 * i + random.nextInt(7),
height - random.nextInt(6));
}
HttpSession session = request.getSession();
session.setMaxInactiveInterval(5 * 60); // 设置session对象5分钟失效
// 将验证码保存在session对象中,key为validation_code
session.setAttribute("validation_code", validationCode.toString());
g.dispose();// 关闭Graphics对象
OutputStream os = response.getOutputStream();
ImageIO.write(image, "JPEG", os);// 以JPEG格式向客户端发送图形验证码
return null;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
JAVA网络硬盘源码(Struts 2+Hibernate+Spring实现) (134个子文件)
FileServiceImpl.class 4KB
ValidationCodeAction.class 4KB
DirectoryServiceImpl.class 3KB
BaseAction.class 3KB
Zip.class 3KB
DownloadFileAction.class 3KB
DownloadMoreFileAction.class 3KB
RegisterAction.class 3KB
LoginAction.class 2KB
FileDAOImpl.class 2KB
User.class 2KB
Encrypter.class 2KB
UserInfo.class 2KB
DirectoryDAOImpl.class 2KB
DirInfo.class 2KB
DirAction.class 2KB
AuthorizationInterceptor.class 2KB
UploadFile.class 2KB
File.class 2KB
FileAction.class 2KB
DeleteAction.class 2KB
Test.class 2KB
Directory.class 1KB
UploadAction.class 1KB
MyFormat.class 1KB
UserDAOImpl.class 1KB
UserServiceImpl.class 1KB
CreateDirAction.class 1KB
ServiceManager.class 1KB
ReloginAction.class 1KB
DiskAction.class 1KB
MyFile.class 782B
Test1.class 642B
FileService.class 494B
DirectoryService.class 483B
FileDAO.class 442B
DAOSupport.class 432B
DirectoryDAO.class 390B
UserService.class 247B
UserDAO.class 241B
.classpath 2KB
style.css 877B
unknown.gif 616B
zip.gif 605B
folder.gif 211B
txt.gif 123B
ValidationCodeAction.java 4KB
FileServiceImpl.java 2KB
User.java 2KB
Zip.java 2KB
DirInfo.java 2KB
BaseAction.java 2KB
Encrypter.java 2KB
DirectoryServiceImpl.java 2KB
UserInfo.java 2KB
DownloadMoreFileAction.java 2KB
DownloadFileAction.java 2KB
Directory.java 1KB
FileDAOImpl.java 1KB
LoginAction.java 1KB
RegisterAction.java 1KB
UploadFile.java 1KB
AuthorizationInterceptor.java 1KB
File.java 1KB
Test.java 1KB
DirectoryDAOImpl.java 1KB
ServiceManager.java 941B
DirAction.java 938B
MyFormat.java 930B
DeleteAction.java 840B
FileAction.java 762B
UploadAction.java 739B
UserServiceImpl.java 738B
UserDAOImpl.java 728B
CreateDirAction.java 572B
DiskAction.java 471B
ReloginAction.java 446B
MyFile.java 430B
FileDAO.java 377B
FileService.java 363B
DirectoryService.java 331B
DirectoryDAO.java 292B
DAOSupport.java 253B
UserDAO.java 198B
UserService.java 185B
Test1.java 174B
prototype.js 121KB
common.js 11KB
main.jsp 3KB
register.jsp 2KB
login.jsp 1KB
create_dir.jsp 1KB
upload.jsp 1008B
test.jsp 551B
dir_result.jsp 537B
file_result.jsp 476B
upload_success.jsp 404B
create_dir_result.jsp 318B
index.jsp 161B
disk_result.jsp 140B
共 134 条
- 1
- 2
DragonDreammer
- 粉丝: 32
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
前往页