action:
package com.xy.action;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Map;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
public class CodeGenAction extends ActionSupport implements SessionAware,ServletResponseAware,RequestAware
{
<wbr>private static int I_WIDTH = 60;<br><wbr>private static int I_HEIGHT = 18;<br><wbr>private static Font VALIDATECODE_FONT = new Font("Times<wbr><wbr> New<wbr><wbr> Roman ", Font.PLAIN, 18);<br><wbr>private Map<String,Object> session;<br><wbr>private HttpServletResponse response;<br><wbr>private Map<String, Object> request;<br><wbr><br><wbr>public String execute()<br><wbr>{<br><wbr><wbr>response.setHeader("Pragma", "No-cache");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>response.setHeader("Cache-Control", "no-cache");</wbr></wbr>
<wbr><wbr>response.setDateHeader("Expires", 0);</wbr></wbr>
<wbr><wbr>response.setContentType("image/jpeg");</wbr></wbr>
<wbr><wbr>// 在内存中创建图象<br><wbr><wbr>BufferedImage image = new BufferedImage(I_WIDTH, I_HEIGHT, BufferedImage.TYPE_INT_RGB);<br><wbr><wbr>// 获取图形上下文<br><wbr><wbr>Graphics g = image.getGraphics();<br><wbr><wbr>// 设定背景色<br><wbr><wbr>g.setColor(Color.white);<br><wbr><wbr>g.fillRect(0, 0, I_WIDTH, I_HEIGHT);<br><wbr><wbr>// 画边框<br><wbr><wbr>g.setColor(Color.blue);<br><wbr><wbr>g.drawRect(0, 0, I_WIDTH - 1, I_HEIGHT - 1);<br><wbr><wbr>Long validate = new Long(10000 + Math.round((Math.random() * 90000)));<br><wbr><wbr>String validateCode = validate.toString();<br><wbr><wbr>session.put("validateCode", validateCode);<br><wbr><wbr><br><wbr><wbr>// 将认证码显示到图象中<br><wbr><wbr>g.setColor(Color.black);<br><wbr><wbr>g.setFont(VALIDATECODE_FONT);<br><wbr><wbr>// g.drawString(rand,10,15);<br><wbr><wbr>g.drawString(validateCode.toString(), 7, 15);<br><wbr><wbr>// 随机产生88个干扰点,使图象中的认证码不易被其它程序探测到<br><wbr><wbr>Random random = new Random();<br><wbr><wbr>for (int iIndex = 0; iIndex < 128; iIndex++)<br><wbr><wbr>{<br><wbr><wbr><wbr>int x = random.nextInt(I_WIDTH);<br><wbr><wbr><wbr>int y = random.nextInt(I_HEIGHT);<br><wbr><wbr><wbr>g.drawLine(x, y, x, y);<br><wbr><wbr>}<br><wbr><wbr>// 图象生效<br><wbr><wbr>g.dispose();<br><wbr><wbr><br><wbr><wbr>try<br><wbr><wbr>{<br><wbr><wbr><wbr>// 输出图象到页面<br><wbr><wbr><wbr>ServletOutputStream sos = response.getOutputStream();<br><wbr><wbr><wbr>ImageIO.write(image, "jpeg", sos);<br><wbr><wbr><wbr>sos.close();<br><wbr><wbr><wbr>return SUCCESS;<br><wbr><wbr>}<br><wbr><wbr>catch (Exception e)<br><wbr><wbr>{<br><wbr><wbr><wbr>return "error";<br><wbr><wbr>}<br><wbr>}<br><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr>public void setSession(Map<String, Object> session)<br><wbr>{<br><wbr><wbr>this.session = session;<br><wbr>}</wbr></wbr></wbr></wbr></wbr>
<wbr>public void setServletResponse(HttpServletResponse response)<br><wbr>{<br><wbr><wbr>this.response = response;<wbr><wbr><br><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr>public void setRequest(Map<String, Object> request)<br><wbr>{<br><wbr><wbr>this.request = request;<br><wbr>}</wbr></wbr></wbr></wbr></wbr>
}
struts.xml,值得注意的时,result type是stream类型
<package name="login" namespace="/" extends="struts-default">
<wbr><action name="toCode" class="com.xy.action.CodeGenAction"><br><wbr><wbr><result type="stream"><br><wbr><wbr><wbr><param name="contentType">image/jpeg</param><br><wbr><wbr></result><br><wbr></action><br>
</package></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
jsp:
<td align="left">
<input id="txtCode" type="text" style="width: 150px" />
<img id="imgCode" src="toCode" />
<a href="javascript:change()"> 看不清,换一张</a>
</td>
<wbr>function change()<br><wbr>{<br><wbr><wbr><wbr><wbr>var img=document.getElementByIdx_x("imgCode");<br><wbr>img.src="toCode?time="+new Date().getTime();<br><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
分享到:
相关推荐
在Struts2中生成验证码可以帮助提升网站的安全性,防止恶意注册、自动登录和其他攻击。 生成验证码主要涉及以下几个步骤: 1. **安装库**:首先,我们需要一个验证码生成库。例如,我们可以使用Apache Commons ...
3. **Action**:在Struts2中负责处理业务逻辑,并响应用户请求的类。 4. **配置文件**:Struts2使用配置文件来定义项目的结构和组件。 5. **Servlet API**:一组Java接口,用于处理HTTP请求和响应。 #### 三、技术...
这个类将包含生成验证码的方法,以及处理用户提交验证的逻辑。 3. **生成中文验证码**: 验证码生成通常涉及随机选择汉字并组合。你可以使用Java的`Random`类和预先准备的汉字字符数组来生成随机的中文字符串。确保...
在Struts2中实现这个功能,我们需要以下步骤: 1. **创建验证码类(CaptchaAction)**: 首先,我们需要创建一个Action类,负责生成和验证验证码。这个类将包含一个方法来生成随机字符串,并将其保存在session中,同时...
在这个例子中,`get`方法可能被重写以生成验证码。它可能会创建一个`ByteArrayOutputStream`来存储图像数据,使用`ImageIO`和`ImageOutputStream`来绘制随机字符串到图像上,然后返回一个`ByteArrayInputStream`,这...
生成验证码图片主要涉及到两个类: 1.SecurityCode.java --- 生成验证码 SecurityCode类中提供的验证码分三个难度,易(全数字)、中(数字+小写英文)、难(数字+大小写英文)。难度使用枚举SecurityCodeLevle表示...
5. **结果映射(Result Mapping)**:在Struts2的配置文件(struts.xml)中,我们需要定义Action类的不同结果,比如生成验证码成功后的页面跳转,或者验证失败后的提示信息。 6. **JSP页面**:前端展示部分,包括...
在Struts2中实现验证码,我们通常会涉及以下几个关键步骤: 1. **生成验证码**:创建一个Java类,用于生成随机的字符串或数字。这个类可能包含一个方法,返回一个指定长度的字符串,例如包含4位数字。我们可以使用...
1.SecurityCode.java --- 生成验证码 SecurityCode类中提供的验证码分三个难度,易(全数字)、中(数字+小写英文)、难(数字+大小写英文)。难度使用枚举SecurityCodeLevle表示,避免使用1、2、3这样没有明确意义...
以下将详细讲解如何在Struts2中创建前端注册验证码。 首先,验证码的实现通常包括两个主要部分:后端生成验证码和前端展示及验证。 1. **后端生成验证码** 后端通常使用Java来生成随机的数字或字母组合。你可以...
Action可能包含一个方法,该方法生成验证码并将其设置到Session中。 - 同时,还需要配置一个结果(Result)类型,比如`stream`,用于将生成的验证码图片直接输出到浏览器。 3. **JSP页面**: - 登录页面的HTML或...
`CaptchaAction`类中,`generate`方法负责生成验证码并返回图像,而`validate`方法接收用户输入并进行验证。 总之,Struts2中的验证码实现涉及了Java图形处理、随机字符串生成以及HTTP请求处理等多个技术领域。这个...
在Java中,生成验证码的步骤包括: 1. **设计验证码内容**:首先,我们需要创建一个包含随机字符或数字的字符串。可以使用`java.util.Random`类生成随机数,并结合字符数组生成随机字符串。为了增加难度,通常会...
在Struts2应用中,通常会将这个Servlet配置为一个Action,当用户请求验证码时,通过Action调用`service`方法生成验证码并显示。在用户提交表单时,服务器会检查用户输入的验证码是否与生成的验证码匹配,以此来确认...
这个类可能包含一个`generate`方法,该方法将调用`RandomCode`类生成验证码,并将其存储在一个会话级的属性中,例如`session.setAttribute("captcha", code)`。 3. **创建结果类型**: Struts2使用结果类型来决定...
在Struts2框架中,我们可以创建一个Action类,该类负责处理生成验证码的请求,如`GenerateVerificationCodeAction`。这个Action将执行上述步骤,并返回生成的验证码图片。 JavaScript在其中的作用主要是在前端与...
3. **结果类型(Result)**:生成验证码后,需要将生成的图像返回给客户端。你可以配置一个特定的结果类型,如“stream”,用于输出图像流到HTTP响应中。 4. **JSP/FreeMarker模板**:前端页面上需要有一个表单让...
在Struts2中,你可以创建一个专门处理登录请求的Action类,这个类通常会注入Spring管理的业务服务。当用户提交登录表单时,Action会接收到请求,验证用户名、密码以及验证码的正确性。验证码通常会通过Session存储,...
首先,我们需要创建一个Action类,这个类负责生成验证码。Action类会生成一串随机字符串,然后将其保存在session中,同时将字符串转化为图像。在生成图像的过程中,我们可以通过改变字体、颜色、角度、噪声点等元素...
在Struts2中,我们可以使用插件或自定义拦截器来实现这些功能。这里我们将主要讨论图像验证码的生成方法。 1. **图像验证码**:最常见的验证码类型,它显示一个随机生成的文本,用户需要输入他们看到的字符。Struts...