`
mushme
  • 浏览: 790112 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

struct2生成验证码

 
阅读更多
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 生成验证码

    ### Struts2 生成验证码知识点解析 #### 一、引言 在Web应用程序开发中,验证码是一种常见的安全机制,用于防止自动化的恶意攻击,如垃圾邮件发送或非法登录尝试等。Struts2作为一款流行的Java Web应用框架,支持...

    struts2生成验证码

    生成验证码图片主要涉及到两个类: 1.SecurityCode.java --- 生成验证码 SecurityCode类中提供的验证码分三个难度,易(全数字)、中(数字+小写英文)、难(数字+大小写英文)。难度使用枚举SecurityCodeLevle表示...

    struts2生成验证码_

    1.SecurityCode.java --- 生成验证码 SecurityCode类中提供的验证码分三个难度,易(全数字)、中(数字+小写英文)、难(数字+大小写英文)。难度使用枚举SecurityCodeLevle表示,避免使用1、2、3这样没有明确意义...

    Struts2的验证码生成

    2. **配置Struts2**:在Struts2的配置文件(struts.xml)中,我们需要定义一个Action,这个Action将负责生成验证码。Action应该有一个结果类型,指向一个JSP页面或者FreeMarker模板,用于显示验证码图片。 3. **...

    struts2生成中文验证码的Action

    这个类将包含生成验证码的方法,以及处理用户提交验证的逻辑。 3. **生成中文验证码**: 验证码生成通常涉及随机选择汉字并组合。你可以使用Java的`Random`类和预先准备的汉字字符数组来生成随机的中文字符串。确保...

    基于struts2的验证码生成

    5. **结果映射(Result Mapping)**:在Struts2的配置文件(struts.xml)中,我们需要定义Action类的不同结果,比如生成验证码成功后的页面跳转,或者验证失败后的提示信息。 6. **JSP页面**:前端展示部分,包括...

    struts2-生成图片验证码

    "struts2-生成图片验证码"的主题表明我们将探讨如何在Struts2框架中实现图片验证码的功能。 验证码通常由随机生成的一串字符组成,这些字符以图像形式显示,用户需要输入他们看到的字符以完成验证。在Struts2中实现...

    struts2实现验证码

    1. **生成验证码**:创建一个Java类,用于生成随机的字符串或数字。这个类可能包含一个方法,返回一个指定长度的字符串,例如包含4位数字。我们可以使用Java的`Random`类和`StringBuilder`类来实现这一功能。 2. **...

    Struts2 图片验证码

    首先,我们需要创建一个Action类,这个类负责生成验证码。Action类会生成一串随机字符串,然后将其保存在session中,同时将字符串转化为图像。在生成图像的过程中,我们可以通过改变字体、颜色、角度、噪声点等元素...

    Struts2验证码

    首先,验证码的实现通常包括两个主要部分:后端生成验证码和前端展示及验证。 1. **后端生成验证码** 后端通常使用Java来生成随机的数字或字母组合。你可以使用`java.util.Random`类生成随机数,然后结合字符集来...

    struts2图片验证码--struts2图片验证码-(通用版)

    ### Struts2 图片验证码实现解析 #### 一、引言 在Web应用程序中,图片验证码(CAPTCHA)被广泛用于防止自动化攻击和机器人操作,确保用户是真实的人类。Struts2框架提供了丰富的功能来集成这样的安全特性,本文将...

    struts中实现验证码

    `ValidateImageAction`是实际生成验证码的Java类。这个类应该包含生成验证码图像和随机字符串的方法。在这个例子中,`get`方法可能被重写以生成验证码。它可能会创建一个`ByteArrayOutputStream`来存储图像数据,...

    struts2 图片 验证码

    这个类可能包含一个`generate`方法,该方法将调用`RandomCode`类生成验证码,并将其存储在一个会话级的属性中,例如`session.setAttribute("captcha", code)`。 3. **创建结果类型**: Struts2使用结果类型来决定...

    通过Struts2返回验证码文件

    7. **Struts2配置**:在Struts2的配置文件(`struts.xml`)中,定义对应的Action映射,包括生成验证码的URL和验证的URL,确保Action类和方法能够被正确地调用。 通过以上步骤,我们就能够在Struts2框架下实现一个完整...

    Ajax+Struts2实现验证码验证功能

    通过ajax来动态的验证验证码输入是否正确。我们这里采用的是ajax+struts2来做的这个验证。...之后我们需要写一个类来生成验证码。 博客地址:http://blog.csdn.net/sdksdk0/article/details/51755489

    Struts2验证码用户登录

    在Struts2框架中,我们可以创建一个Action类,该类负责处理生成验证码的请求,如`GenerateVerificationCodeAction`。这个Action将执行上述步骤,并返回生成的验证码图片。 JavaScript在其中的作用主要是在前端与...

    验证码生成工具类

    例如,可能有一个`generate()`方法用于生成验证码,一个`getImageBytes()`方法用于获取验证码图像的字节数组,以及一个`validate(String input)`方法用于验证用户输入。 在提供的压缩包文件中,"cn"可能代表了包名...

    struts2验证码

    3. **结果类型(Result)**:生成验证码后,需要将生成的图像返回给客户端。你可以配置一个特定的结果类型,如“stream”,用于输出图像流到HTTP响应中。 4. **JSP/FreeMarker模板**:前端页面上需要有一个表单让...

    struts2 验证码----web界面生成几种常见的验证码

    5. **工具使用**:除了Struts2的插件,还有许多第三方库可以帮助我们生成验证码,例如,Google的reCAPTCHA服务,它可以提供更高级的保护,如行为分析,以检测是否为真实人类。这些工具的集成也可以在Struts2项目中...

    仿CSDN样式(Struts2中文验证码源代码)

    6. **Servlet**:这个项目中可能包含一个专门生成验证码的Servlet。它会随机生成一串中文字符,存储在Session中,并将其绘制到图像上。生成的图像以JPEG或PNG格式输出,供JSP页面显示。 7. **中文字符库**:为了...

Global site tag (gtag.js) - Google Analytics