Struts2 实现验证码功能详解
需积分: 3 186 浏览量
更新于2024-09-22
1
收藏 68KB DOC 举报
"struts2验证码实现方法"
在Struts2框架中,验证码的实现主要涉及到动态生成图片并将其发送到浏览器的过程。以下是如何在Struts2中创建和使用验证码的详细步骤:
首先,验证码的目的是为了防止自动化程序(如机器人)进行非法操作,通常用于表单提交验证用户身份。它通过生成一串随机数字或字母,然后要求用户输入相同的内容来确认他们不是机器。
1. HTML 页面设计:
在`register.jsp`页面中,我们看到一个`<form>`元素内包含一个文本输入框用于用户输入验证码和一个`<img>`标签显示验证码图片。JavaScript函数`changidateCode(obj)`被用来在每次点击图片时更改验证码。这里的`d`参数传递当前时间戳,确保每次请求的验证码是不同的,避免浏览器缓存导致验证码不更新。
```jsp
<script type="text/javascript">
function changidateCode(obj) {
var timeNow = new Date().getTime();
obj.src = "creatidateAction.action?d=" + timeNow;
}
</script>
<form>
<table>
<tr>
<td align="right">验证码:</td>
<td><s:textfield name="validate"></s:textfield></td>
<td><img src="creatidateAction" align="left" onclick="changidateCode(this)"/></td>
</tr>
</table>
</form>
```
2. Struts2 Action 实现:
`creatidateAction.java`是处理验证码生成的核心。这个Action继承自`ActionSupport`,并定义了一个`ByteArrayInputStream`来存储生成的图片数据。Action的主要任务是生成随机数字,将其画到图片上,并将图片以流的形式返回给浏览器。
```java
import java.io.*;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import java.awt.*;
import java.awt.image.BufferedImage;
public class creatidateAction extends ActionSupport {
private ByteArrayInputStream inputStream;
// 生成验证码的方法
public String execute() throws IOException {
// 生成随机数字或字母的逻辑
// ...
// 创建BufferedImage对象,设置图片尺寸和颜色
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
// 绘制背景、线条等
// ...
// 生成随机字符串并写入图片
g.setColor(Color.BLACK);
g.drawString(randomString, x, y);
// 将图片保存到ByteArrayOutputStream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos);
inputStream = new ByteArrayInputStream(baos.toByteArray());
// 设置Action的返回类型为stream,以便返回图片数据
return ActionSupport.STREAM;
}
// 其他getter和setter方法
// ...
}
```
在这个Action中,我们需要实现生成随机字符串的逻辑,可以使用`Random`类生成随机数字,然后绘制到图片上。同时,我们还需要配置Struts2的配置文件,指定`creatidateAction`返回`stream`类型并指明如何处理这个流,例如设置`Content-Type`为`image/jpeg`。
3. Struts2配置:
在`struts.xml`配置文件中,需要为`creatidateAction`添加相应的配置,告诉Struts2如何处理返回的`stream`类型结果。
```xml
<package name="default" namespace="/" extends="struts-default">
<!-- ... -->
<action name="creatidateAction" class="creatidateAction">
<result type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">inputStream</param>
</result>
</action>
<!-- ... -->
</package>
```
总结来说,Struts2验证码的实现主要包括前端页面的交互、后端Action的生成和返回以及Struts2框架的配置。通过这样的方式,我们可以创建一个动态的、每次刷新都不同的验证码,从而提高网站的安全性。
181 浏览量
2018-10-27 上传
2014-08-05 上传
2022-01-23 上传
大鲸鱼吃小鲸鱼
- 粉丝: 3538
- 资源: 14
最新资源
- BottleJS快速入门:演示JavaScript依赖注入优势
- vConsole插件使用教程:输出与复制日志文件
- Node.js v12.7.0版本发布 - 适合高性能Web服务器与网络应用
- Android中实现图片的双指和双击缩放功能
- Anum Pinki英语至乌尔都语开源词典:23000词汇会话
- 三菱电机SLIMDIP智能功率模块在变频洗衣机的应用分析
- 用JavaScript实现的剪刀石头布游戏指南
- Node.js v12.22.1版发布 - 跨平台JavaScript环境新选择
- Infix修复发布:探索新的中缀处理方式
- 罕见疾病酶替代疗法药物非临床研究指导原则报告
- Node.js v10.20.0 版本发布,性能卓越的服务器端JavaScript
- hap-java-client:Java实现的HAP客户端库解析
- Shreyas Satish的GitHub博客自动化静态站点技术解析
- vtomole个人博客网站建设与维护经验分享
- MEAN.JS全栈解决方案:打造MongoDB、Express、AngularJS和Node.js应用
- 东南大学网络空间安全学院复试代码解析