<div id="authCode">
<input type="image" src="rand.action" onclick="changeValidateCode(this)"/>
</div>
<script type="text/javascript">
function changeValidateCode(obj) {
var currentTime= new Date().getTime();
obj.src = "rand.action?d=" + currentTime;
}
</script>
<package name="randpicture" extends="struts-default">
<action name="rand" class="produceAuthCode">
<result type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">inputStream</param>
</result>
</action>
</package>
package com.demo.action;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
*
* 生成验证码ACTION
*
*
* */
public class ProduceAuthCode extends ActionSupport {
private static final long serialVersionUID = 1L;
private ByteArrayInputStream inputStream;
public ByteArrayInputStream getInputStream() {
return inputStream;
}
public void setInputStream(ByteArrayInputStream inputStream) {
this.inputStream = inputStream;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
//在内存中创建对象
int width=85; int 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));
//随即产生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);
}
//去随机产生的验证码(6位数字)
String sRand="";
for(int i=0;i<6;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
ActionContext.getContext().getSession().put("rand", sRand);
//图像生成
g.dispose();
ByteArrayOutputStream output=new ByteArrayOutputStream();
ImageOutputStream imageOut=ImageIO.createImageOutputStream(output);
ImageIO.write(image, "JPEG", imageOut);
imageOut.close();
ByteArrayInputStream input=new ByteArrayInputStream(output.toByteArray());
this.setInputStream(input);
return "success";
}
//给定范围获得随即颜色
private Color getRandColor(int fc, int bc) {
// TODO Auto-generated method stub
Random random=new Random();
if(fc>255)fc=255;
if(bc>255)fc=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);
}
}
ActionContext ctx=ActionContext.getContext();
if(!CheckingCode.equals(ctx.getSession().get("rand"))){
ctx.put("Msg", "验证码有误!");
return "error";
}
分享到:
相关推荐
(参照别人的代码) 部署: 1、将整个源码引入到MyEclipse当中. 2、部署到Tomcat下面,启动服务器,直接 敲...2、当你登录时候,提交的输入框中的验证码和session中存放的验证码比较,如果一样,则通过,不一样,则失败
struts2图形验证码实现,两个实现类,和你一个action类
struts2验证码 struts2验证码 struts2验证码
"最新的struts2验证码.rar"很可能包含了有关如何在Struts2框架下实现验证码功能的示例代码或配置文件。 Struts2验证码的实现通常涉及到以下几个关键知识点: 1. **验证码生成**:验证码通常由随机生成的一串字符或...
Struts2验证码用户登录是一个常见的Web开发场景,用于防止恶意自动化的登录尝试,例如机器人或爬虫。在本文中,我们将深入探讨如何在Struts2框架中实现验证码功能,并结合JavaScript和session技术来增强用户体验。 ...
Struts2验证码技术详解 验证码是一种用于防止恶意自动程序(如机器人)滥用网站服务的安全机制。在Struts2框架中,实现验证码功能可以确保用户交互的真实性和安全性。本篇文章将详细解析如何在Struts2中生成和使用...
在这个特定的案例中,我们关注的是"一个简单的Struts2验证码",这通常涉及到在用户交互过程中增加安全性,防止机器人或自动化程序进行恶意操作,如频繁提交表单或注册。 验证码的主要目的是验证用户是人类而非自动...
Struts2 验证码实例;通过该实例可掌握验证码的实现原来
Struts2验证码是一个在Web应用中用于验证用户输入的有效性的安全机制。验证码的主要目的是防止自动化的机器人或恶意脚本执行不被允许的操作,例如频繁的登录尝试、恶意注册或者垃圾信息的提交。在这个Struts2的项目...
最近讲到struts2的验证码随手写了一个希望能帮到大家
开发环境: eclipse Kepler JEE IDE + Tomcat v6.0 + Struts-2.3.15(最新版) 步骤: 1. 下载后解压,import to eclipse as a project. 2. 启动 Tomcat v6.0 3. 打开...
Struts2提供了一些内置的支持来帮助开发者生成和验证验证码,以增强网站的安全性。 验证码的种类多样,包括图像验证码、音频验证码、数学问题验证码等。在Struts2中,我们可以使用插件或自定义拦截器来实现这些功能...
验证码实例...............................
使用struts2框架做的验证码,有纯数字版,数字和字母混合板,还有汉字版。