Struts的Token(令牌)机制能够很好的解决表单重复提交的问题,基本原理是:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。 这时其实也就是两点,第一:你需要在请求中有这个令牌值,请求中的令牌值如何保存,其实就和我们平时在页面中保存一些信息是一样的,通过隐藏字段来保存,保存的形式如: 〈input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="6aa35341f25184fd996c4c918255c3ae"〉,这个value是TokenProcessor类中的generateToken()获得的,是根据当前用户的session id和当前时间的long值来计算的。第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。下面就以在数据库中插入一条数据来说明如何防止重复提交。
public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { // TODO Auto-generated method stub if (isTokenValid(request, true)) {
// 未重复提交时,正确的时候应该做的事情
}
else {
// 重复提交时,需要做的事情
saveToken(request);
}
saveToken(request); (1)
}
经过测试如果(1)不保存令牌,会造成添加成功一次记录之后,不能进行第2次添加
分享到:
相关推荐
将生成的Token附加到JSP页面的隐藏字段中,当用户提交表单时,Token会随同其他表单数据一起发送回服务器。 3. 检验Token 服务器接收到请求后,首先检查Session中的Token是否与客户端提交的Token匹配。如果匹配,...
这样,即使用户再次提交表单,由于Session中的Token已被删除,验证将会失败,从而避免了重复提交。 5. **错误处理**: 如果验证失败,服务器可以返回一个错误提示,告知用户请求可能已处理,无需再次提交。 在...
三、Struts中实现Token机制的步骤 1. **配置Action** 在Struts配置文件中,为需要防止重复提交的Action添加一个拦截器引用,如`token`或`token-session`。这两个拦截器都可以处理Token,但`token-session`更安全,...
struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...
总的来说,Struts Token机制通过维护一个临时的、一次性使用的Token,有效地解决了Web应用中的表单重复提交问题,提高了系统的稳定性和安全性。在实际开发中,应根据项目需求灵活运用并优化此机制。
Struts的Token机制是Web应用中防止表单重复提交的一种常用方法。在处理表单提交时,如果用户意外地多次点击了提交按钮,可能会导致数据的重复录入,从而引起不必要的问题,例如订单重复、数据库数据异常等。为了解决...
### 使用Struts Token机制解决表单重复提交 #### 一、引言 在Web应用程序开发过程中,表单重复提交是一个常见的问题。用户可能因为网络延迟、浏览器缓存等原因导致重复点击提交按钮,进而向服务器发送多个相同的...
当用户尝试重复提交表单时,Struts2会检测到Token已经使用过,因此会抛出异常。你可以捕获这个异常并给出相应的提示,例如: ```java public class MyAction extends ActionSupport { @Override public void ...
当用户提交表单时,服务器会检查session中的token与表单提交的token是否匹配,如果匹配并且是首次提交,那么执行业务逻辑,否则视为重复提交并拒绝处理。 具体实现步骤如下: 1. **配置拦截器**:在struts.xml配置...
对于第二种原因,即提交表单后刷新浏览器页面导致的重复提交,Struts2框架允许开发者通过配置结果视图的跳转方式来解决。默认情况下,Struts2使用的是dispatcher类型的forward跳转。为了避免刷新页面导致的重复提交...
Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用...综上所述,Struts2的Token机制是防止Web应用中重复提交的有效工具,通过合理的配置和编程,可以为用户的操作提供更安全的环境。
### 解决Struts中通过Token防止重复提交的问题 在Web应用程序开发中,特别是基于MVC架构的框架如Apache Struts中,确保用户操作的安全性是非常重要的。其中一项常见且重要的安全措施是防止表单的重复提交。本文将...
下面基于提供的代码片段详细介绍如何实现Struts中的Token机制。 #### 三、手动实现Struts Token机制 根据提供的代码片段,可以看出这是一个自定义的Token管理类。以下是对这段代码的详细解析: 1. **定义Token...
### 利用Token机制解决重复提交问题 在Web应用开发中,防止表单的重复提交是一个常见的需求。本文将深入探讨如何通过Token机制来解决这一问题,并提供详细的实现步骤及原理解析。 #### 一、Token机制简介 Token...
在Web应用中,表单重复提交是一个常见的问题,可能导致数据的不一致性。为了解决这个问题,我们可以使用Token机制。在SSM(Spring、SpringMVC、MyBatis)开发框架中,结合注解和拦截器,可以有效地实现表单重复提交...
3. **Token机制**:在Struts2中,Token机制用于解决重复提交问题。系统为每个表单生成一个唯一的Token,将其隐藏在表单中,并在提交时一起发送到服务器。服务器接收到请求后,会检查Token的有效性,如果已经处理过这...
当用户提交表单时,服务器会检查提交的Token值是否与Session中的Token值匹配,如果匹配则处理请求,否则视为无效请求并忽略。 ### 二、Struts2 Token插件配置 1. **启用Token插件**:在Struts2的配置文件`struts....