1.首先要有生成验证码图片的代码
package info.frady.result;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
public class VerifyImage
{
public String GetImage(OutputStream outputStream)
{
int width = 60, 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));
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);
}
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(110), 20 + random.nextInt(110), 20 + random
.nextInt(110)));
g.drawString(rand, 13 * i + 6, 16);
}
g.dispose();
try
{
ImageIO.write(image, "JPEG", outputStream);
outputStream.flush();
return sRand;
} catch (IOException e)
{
e.printStackTrace();
return "fail";
}
}
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);
}
}
2.自定义一个result,来调用生成验证码的代码,并将验证码写入session
package info.frady.result;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.StrutsResultSupport;
import com.opensymphony.xwork2.ActionInvocation;
public class ImageResult extends StrutsResultSupport{
private HttpSession session;
protected void doExecute(String arg0, ActionInvocation invocation) throws Exception
{
//获得Request
HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(
ServletActionContext.HTTP_REQUEST);
//获得session
session = request.getSession(true);
//获得response
HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(
ServletActionContext.HTTP_RESPONSE);
//设置无缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
VerifyImage verify = new VerifyImage();
OutputStream os = response.getOutputStream();
//获得随机验证码
String str = verify.GetImage(os);
//将验证码放入session
if(session.getAttribute("rand")!=null){
session.removeAttribute("rand");
}
session.setAttribute("rand", str);
}
}
3.使用此验证码,在action中配置
<result-types>
<result-type name="image" class="info.frady.result.ImageResult" />
</result-types>
<action name="image" class="info.frady.action.ImageAction">
<result name="success" type="image" />
</action>
4.当然了,有人会问ImageAction的代码是什么,答案是空的
package info.frady.action;
import com.opensymphony.xwork2.ActionSupport;
public class ImageAction extends ActionSupport {
public String execute() throws Exception {
return SUCCESS;
}
}
使用的话,就用image.action来访问。。。。
分享到:
相关推荐
### Struts2 生成验证码知识点解析 #### 一、引言 在Web应用程序开发中,验证码是一种常见的安全机制,用于防止自动化的恶意攻击,如垃圾邮件发送或非法登录尝试等。Struts2作为一款流行的Java Web应用框架,支持...
生成验证码图片主要涉及到两个类: 1.SecurityCode.java --- 生成验证码 SecurityCode类中提供的验证码分三个难度,易(全数字)、中(数字+小写英文)、难(数字+大小写英文)。难度使用枚举SecurityCodeLevle表示...
1.SecurityCode.java --- 生成验证码 SecurityCode类中提供的验证码分三个难度,易(全数字)、中(数字+小写英文)、难(数字+大小写英文)。难度使用枚举SecurityCodeLevle表示,避免使用1、2、3这样没有明确意义...
2. **配置Struts2**:在Struts2的配置文件(struts.xml)中,我们需要定义一个Action,这个Action将负责生成验证码。Action应该有一个结果类型,指向一个JSP页面或者FreeMarker模板,用于显示验证码图片。 3. **...
这个类将包含生成验证码的方法,以及处理用户提交验证的逻辑。 3. **生成中文验证码**: 验证码生成通常涉及随机选择汉字并组合。你可以使用Java的`Random`类和预先准备的汉字字符数组来生成随机的中文字符串。确保...
5. **结果映射(Result Mapping)**:在Struts2的配置文件(struts.xml)中,我们需要定义Action类的不同结果,比如生成验证码成功后的页面跳转,或者验证失败后的提示信息。 6. **JSP页面**:前端展示部分,包括...
"struts2-生成图片验证码"的主题表明我们将探讨如何在Struts2框架中实现图片验证码的功能。 验证码通常由随机生成的一串字符组成,这些字符以图像形式显示,用户需要输入他们看到的字符以完成验证。在Struts2中实现...
1. **生成验证码**:创建一个Java类,用于生成随机的字符串或数字。这个类可能包含一个方法,返回一个指定长度的字符串,例如包含4位数字。我们可以使用Java的`Random`类和`StringBuilder`类来实现这一功能。 2. **...
首先,我们需要创建一个Action类,这个类负责生成验证码。Action类会生成一串随机字符串,然后将其保存在session中,同时将字符串转化为图像。在生成图像的过程中,我们可以通过改变字体、颜色、角度、噪声点等元素...
首先,验证码的实现通常包括两个主要部分:后端生成验证码和前端展示及验证。 1. **后端生成验证码** 后端通常使用Java来生成随机的数字或字母组合。你可以使用`java.util.Random`类生成随机数,然后结合字符集来...
### Struts2 图片验证码实现解析 #### 一、引言 在Web应用程序中,图片验证码(CAPTCHA)被广泛用于防止自动化攻击和机器人操作,确保用户是真实的人类。Struts2框架提供了丰富的功能来集成这样的安全特性,本文将...
`ValidateImageAction`是实际生成验证码的Java类。这个类应该包含生成验证码图像和随机字符串的方法。在这个例子中,`get`方法可能被重写以生成验证码。它可能会创建一个`ByteArrayOutputStream`来存储图像数据,...
这个类可能包含一个`generate`方法,该方法将调用`RandomCode`类生成验证码,并将其存储在一个会话级的属性中,例如`session.setAttribute("captcha", code)`。 3. **创建结果类型**: Struts2使用结果类型来决定...
7. **Struts2配置**:在Struts2的配置文件(`struts.xml`)中,定义对应的Action映射,包括生成验证码的URL和验证的URL,确保Action类和方法能够被正确地调用。 通过以上步骤,我们就能够在Struts2框架下实现一个完整...
通过ajax来动态的验证验证码输入是否正确。我们这里采用的是ajax+struts2来做的这个验证。...之后我们需要写一个类来生成验证码。 博客地址:http://blog.csdn.net/sdksdk0/article/details/51755489
在Struts2框架中,我们可以创建一个Action类,该类负责处理生成验证码的请求,如`GenerateVerificationCodeAction`。这个Action将执行上述步骤,并返回生成的验证码图片。 JavaScript在其中的作用主要是在前端与...
例如,可能有一个`generate()`方法用于生成验证码,一个`getImageBytes()`方法用于获取验证码图像的字节数组,以及一个`validate(String input)`方法用于验证用户输入。 在提供的压缩包文件中,"cn"可能代表了包名...
3. **结果类型(Result)**:生成验证码后,需要将生成的图像返回给客户端。你可以配置一个特定的结果类型,如“stream”,用于输出图像流到HTTP响应中。 4. **JSP/FreeMarker模板**:前端页面上需要有一个表单让...
5. **工具使用**:除了Struts2的插件,还有许多第三方库可以帮助我们生成验证码,例如,Google的reCAPTCHA服务,它可以提供更高级的保护,如行为分析,以检测是否为真实人类。这些工具的集成也可以在Struts2项目中...
6. **Servlet**:这个项目中可能包含一个专门生成验证码的Servlet。它会随机生成一串中文字符,存储在Session中,并将其绘制到图像上。生成的图像以JPEG或PNG格式输出,供JSP页面显示。 7. **中文字符库**:为了...