首先要在第一次进入到添加用户页面时要使用toAddUser.do的url形式进入
在ToAddUserAction类中实现方法
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
... ...
saveToken(request);//在session中保存token值
... ...
return mapping.findForward("toAddUser");
}
在页面中要使用html:form标签,struts会在该标签的开始执行标签的代码中在form的表单项中加入一个名字为org.apache.struts.taglib.html.TOKEN的hidden类别的一个input值,查看页面的源代码可以看到
<form name="addUserForm" method="post" action="/DADJPT/addUser.do" onsubmit="return validateForm();" target="_parent">
... ...
<input type="hidden" name="org.apache.struts.taglib.html.TOKEN"
value="45dd9d38ebd34db949842fbb7897f3f7">
... ...
</form>
这样的话在提交addUser.do的时候request会携带此变量
在addUserAction中可以判断request中的token值是否跟存放在session中的token一样,不一样得话则转到页面过期的界面,并重置token值,如果相同则执行insert表操作,并也重置token值,并重新回到添加界面
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
AddUserForm addUserForm = (AddUserForm)form;
User user = addUserForm.getUser();
if(idTokenValid(request,true)){
userDao.add(user);
... ...
}else{
saveToken(request);
return mapping.findForward("timeoutPage");
}
return mapping.findForward("toAddUser");
}
这样在按f5刷新后者回退后再提交form将不会进行重复提交
关于在文章开头提到的问题,经测试是因为在页面中使用了<iframe />标签,表单是放在frame标签中的,而提交成功后又回到了添加界面,回退后在外部页面中的org.apache.struts.taglib.html.TOKEN值保持原来的值不变(该值可以通过session.getAttribute("org.apache.struts.action.TOKEN")得到),而在iframe标签中的,在每一个提交成功的页面里面org.apache.struts.taglib.html.TOKEN值都已经刷新为新生成的token值了,所以可以进行有效得提交,在ifrme中body属性onload中加入document.forms[0].getElementsByTagName("input")[0].value = window.parent.document.getElementById("org.apache.struts.taglib.html.TOKEN1").value;并在外部页面中手动加入一个同名的hidden值即可解决
分享到:
相关推荐
### 解决Struts中通过Token防止重复提交的问题 在Web应用程序开发中,特别是基于MVC架构的框架如Apache Struts中,确保用户操作的安全性是非常重要的。其中一项常见且重要的安全措施是防止表单的重复提交。本文将...
通过以上步骤,我们可以有效地利用Struts框架内置的令牌机制来解决表单重复提交的问题。这种方法简单易行,同时也能提高应用的安全性和用户体验。在实际项目中,可以根据具体需求灵活调整令牌的有效期、验证逻辑等,...
总的来说,Struts Token机制通过维护一个临时的、一次性使用的Token,有效地解决了Web应用中的表单重复提交问题,提高了系统的稳定性和安全性。在实际开发中,应根据项目需求灵活运用并优化此机制。
总的来说,Struts2的`token`拦截器是防止重复提交的有效解决方案,通过结合合理的拦截器配置和跳转策略,可以确保应用程序的稳定性和数据一致性。在实际开发中,还需要考虑其他因素,如异常处理、用户体验优化等,以...
在 Struts 中,"重复提交 token" 是一个重要的概念,用于防止用户意外或恶意地多次提交同一个表单,从而确保数据的一致性和安全性。 在 Web 应用中,重复提交问题可能出现在用户网络不稳定或误操作的情况下,导致同...
struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...
下面将详细讲解Struts2令牌解决重复提交问题的过程: 1. **生成令牌**:在Action中,使用`TokenAwareActionSupport`作为基类,这个类实现了`TokenSessionStore`接口,可以方便地获取和验证令牌。在表单展示之前,...
综上所述,Struts2框架提供了token机制以及灵活的跳转方式配置来解决表单重复提交的问题。开发者在使用时需要注意配置token相关标签和拦截器,并通过设置正确的结果视图跳转类型来防止因刷新页面导致的重复提交。...
在提供的压缩包文件"struts+token机制解决表单重复提交"中,可能包含了具体的Struts配置文件、Action类、Interceptor实现以及示例代码,可以帮助读者更深入地理解并实践这个机制。通过对这些代码的学习和研究,...
本话题将探讨如何在Struts 1.2中利用Token机制来解决HTTP请求的重复提交问题,这是一种常见的防止用户意外或恶意多次点击提交按钮导致数据异常的策略。 一、重复提交问题 在Web应用中,如果一个表单被用户意外或者...
防止Struts中的重复提交是Web应用开发中的重要环节,通过合理运用Token机制、OWSM或者自定义控制器验证,可以有效地避免此类问题。在实际开发中,我们需要结合项目的具体需求,选择合适的防重复提交策略,以确保系统...
综上所述,Struts框架通过Token机制有效地解决了表单重复提交的问题,提供了更健壮的Web应用安全性。正确理解和应用这一机制对于Java Web开发者来说至关重要。在实际项目中,结合其他防御策略,如CSRF防护,可以...
在实际开发中,我们经常会遇到两个关键问题:重复提交和文件上传。本教程将详细介绍如何使用Struts来解决这些问题。 一、重复提交问题 在Web应用中,用户可能会意外地多次点击提交按钮,导致服务器端接收到重复的...
总结,Struts2的tokenSession机制是JavaEE Web开发中防止重复提交的有效手段,通过生成并校验token,确保每个请求的唯一性,从而保护了业务数据的完整性。在实际项目中,我们需要正确配置和使用这个机制,以提高应用...
通过以上介绍可以看出,无论是使用Struts框架还是其他框架,利用Token机制都能有效地解决Web应用程序中表单重复提交的问题。关键是正确地生成、验证和清理Token,确保每个请求都是有效的且不被重复使用。这种方法...
为了防止这种表单重复提交,Struts提供了一种令牌(Token)机制。令牌机制的工作原理如下: 1. **设置令牌**:在用户访问表单之前,Action类中的`execute`方法会调用`saveToken`方法,将一个唯一的令牌保存在请求...
Struts2提供了一种名为“token”的机制来解决这个问题。 **什么是Token机制?** Token机制是一种防止重复提交的方法,它通过在客户端(通常是浏览器的session或者cookie)和服务器端存储一个唯一的令牌,确保每个...
### Struts Token机制防止页面刷新及重复提交 在Web应用开发过程中,特别是在使用MVC框架如Apache Struts进行开发时,防止表单重复提交是一个重要的安全措施。表单重复提交通常发生在用户点击“提交”按钮后,由于...