Struts2防止表单重复提交的配置教程
需积分: 4 34 浏览量
更新于2024-10-05
收藏 64KB DOC 举报
"防止Action重复提交的配置方法"
在Web应用程序开发中,特别是使用Struts框架时,确保Action不被重复提交是一项重要的任务。重复提交可能导致数据不一致性和安全问题。Struts2提供了一种内置机制来处理这个问题,即使用Token Interceptor(令牌拦截器)。以下是如何使用Struts2防止表单重复提交的详细步骤和原理。
1. **引入<s:token>标签**
在提交表单的JSP页面中,你需要在`<form>`标签内部添加 `<s:token/>` 标签。这会在表单中生成一个唯一的标识符,用于跟踪用户的请求。例如:
```jsp
<form name="myname" action="myaction.do" method="post">
<input type="text" name="stuName" value=""/>
<s:token/>
<input type="button" onclick="mymethod(this.form);"/>
</form>
```
这个`<s:token/>`标签会生成一个隐藏的输入字段,携带一个唯一的ID,这个ID在每次请求时都是不同的。
2. **配置拦截器**
在Struts的配置文件(通常是`struts.xml`)中,你需要为对应的Action添加一个名为`token`的拦截器引用。例如:
```xml
<action name="Save"
class="com.yourcom.app.Action.Dataform.saveAction"
method="Save">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="token"/>
<result name="invalid.token">/Info/NoBack.jsp</result>
</action>
```
这里的`<interceptor-ref name="token"/>`表示启用Token拦截器,它会检查每个请求的令牌是否与上次提交的令牌相同。如果相同,那么就认为这是一个重复的提交,并返回`invalid.token`的结果。
3. **处理无效令牌**
当用户尝试重复提交时,由于令牌已经被验证过,拦截器会捕获到这个情况,并将控制权传递给配置的`invalid.token`结果,通常是一个提示页面,如`NoBack.jsp`。在这个页面上,你可以显示一条消息告知用户表单已提交,不应再次提交。
4. **工作原理**
Struts2的Token Interceptor的工作原理是:当用户首次提交表单时,会生成一个唯一的令牌并存储在session中。当用户再次提交表单时,拦截器会检查这个令牌是否已经存在于session中。如果存在,说明是重复提交,于是返回错误结果;如果不存在,说明是新请求,允许提交并更新session中的令牌。
通过以上配置,你可以有效地防止用户的表单数据被意外或恶意地重复提交,从而保护了系统的数据一致性。同时,这也是一种防止跨站请求伪造(CSRF)攻击的简单方法,因为每个令牌都是与特定会话关联的,只有拥有正确令牌的请求才会被接受。
2019-03-14 上传
373 浏览量
102 浏览量
314 浏览量
2012-02-28 上传
2009-09-15 上传
134 浏览量
123 浏览量
143 浏览量
yunkaige
- 粉丝: 4
- 资源: 2
最新资源
- skinrestorerfilegen
- katacoda方案:Katacoda方案
- 多功能便签效果
- JSPGenCMS 4.0 20160520
- SZFMBeadando
- XX种畜牧草良种繁殖场反季节蔬菜(萝卜)加工项目商业计划书.zip
- 开店损益评估表excel模板下载
- 电子邮件地址:Spring Cloud的餐厅服务,餐厅和餐厅
- capecodseedcoop
- html5lib-0.999999999.tar.gz
- Cloth-simulation:使用质量弹簧模型模拟布料
- vicky:Vicky 是使用 ffmpeg 将视频文件转换为声音文件的 GUI 程序
- perl-orm-easy:PostgreSQL数据库内ORM
- onlineSystem:基于SSH + BootStrap的在线考试系统
- 商场设计CAD图纸
- Dizi Haberleri-crx插件