Struts同步令牌防止表单重复提交实战指南
需积分: 9 89 浏览量
更新于2025-01-01
收藏 58KB PDF 举报
"本文主要介绍了如何使用Struts框架的同步令牌机制来防止表单的重复提交,以及这一机制的基本工作原理。"
在Web应用中,用户可能会意外地多次点击提交按钮,导致数据被重复处理,这称为重复提交问题。为了防止这种情况,Struts框架提供了一种名为同步令牌(Token)的机制。下面我们将详细讨论如何使用这个机制以及它的工作原理。
首先,我们需要在用户要提交的页面(如toSubmit.jsp)的Action中生成一个同步令牌。在打开该页面的Action1中,我们需要调用`saveToken(request)`方法。例如,在`execute`方法内:
```java
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// 生成同步令牌
saveToken(request);
return mapping.findForward("toSubmit");
}
```
这个`saveToken`方法会将一个唯一的令牌存储到用户的会话(session)中,以供后续验证使用。
当用户提交表单时,请求会到达处理提交的Action2。在这个Action中,我们需要检查令牌的有效性。这是通过调用`isTokenValid(request, true)`来完成的:
```java
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// 验证同步令牌
if (isTokenValid(request, true)) {
// 执行提交操作
} else {
// 重复提交,返回错误提示
return mapping.findForward("Error");
}
}
```
`isTokenValid`方法会检查令牌是否有效,如果有效,则允许执行提交操作,否则返回错误。
值得注意的是,为了使Struts的同步令牌机制正常工作,表单`<form>`标签必须使用Struts的标签库,即`<html:form>`,因为这个自定义标签会自动处理令牌的嵌入和验证。
同步令牌的工作原理大致如下:
1. 生成令牌:在Action1中,`saveToken`方法会生成一个唯一的字符串(令牌),并将其存储到当前用户的会话中,键值对为`Globals.TRANSACTION_TOKEN_KEY`。
2. 添加令牌到页面:`<html:form>`标签会自动在表单中添加一个隐藏字段,包含当前的令牌值。
3. 提交表单:用户提交表单时,这个令牌会被一起发送到服务器。
4. 验证令牌:Action2接收到请求后,`isTokenValid`方法会检查请求中的令牌与会话中的令牌是否匹配,并且是否已使用过。如果匹配且未使用过,令牌被视为有效,执行提交操作;否则,认为是重复提交,返回错误。
通过这种方式,Struts的同步令牌机制有效地解决了表单的重复提交问题,确保每个请求只被处理一次,从而保护了数据的完整性。
173 浏览量
287 浏览量
2022-01-20 上传
132 浏览量
114 浏览量
点击了解资源详情
2025-01-03 上传
wang_heaven
- 粉丝: 0
- 资源: 8
最新资源
- yet-another-emoji-support:这是IntelliJ插件,支持使用内容辅助功能在编辑器中插入表情符号
- Feel Good Browsing-crx插件
- 彩色微立体商务幻灯片图表整套下载PPT模板
- Springboot 结合Apache Spark 2.4.4与Scala 2.12 集成示例
- Template-Elsevier.zip
- SAM_BHoM:SAM与建筑物和人居物体模型(BHoM)的连接
- Hello World_java_world_gardenwew_
- d6f-2jcieev01-raspberrypi:带有评估套件2JCIE-EV01-RP1和某些Raspberry-Pi板的D6F MEMS流量传感器
- 基于图神经网络的一个天气推荐系统.zip
- angular-test-reporter:用于发布和查看自动化测试结果的应用程序,使用 AngularJS 和节点 Rest 服务器
- EPSON 20080 宣纸打印过程起皱的解决方法.rtf.zip
- GW Warp Bookmarks-crx插件
- 黑色艺术时尚图表大全PPT模板
- 前端设计模式:设计模式
- palm:with使用背包钥匙扣提醒您过度紫外线辐射:old_key:
- sqj-star.github.io