Struts2 实现验证码功能详解
需积分: 3 188 浏览量
更新于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 上传
2018-10-28 上传
大鲸鱼吃小鲸鱼
- 粉丝: 3554
- 资源: 14
最新资源
- Leet_Code
- MyNAS-UI
- js代码-罗马数字测试
- 数据课程设计排班系统.rar
- Leaflet-based-Javascript-Mapper-App:传单地图-Mapper App
- LKC-Tools:收割者剧本
- collection-mobile-page:我做过的h5
- My-Project:美好的经典
- Miaoo朋友圈程序全开源版源码
- 最新微喜帖&微信请帖请柬网源码 手机微喜帖+微信网页版请帖+ASP_ACCESS版.zip
- 大三Java项目实践学生成绩管理系统 .zip
- mysql代码-学习sql笔记
- anavi-play-phat:简单的开源硬件键盘,可在Raspberry Pi上玩游戏
- R软件代码转换为matlab-piano-emulator:一个简单的GUI钢琴模拟器,带有Matlab
- kpexec:kpexec是一个kubernetes cli,它以高特权在容器中运行命令
- phaser-ads:一个Phaser插件,用于在phaser.io游戏中提供良好的广告集成