token 拦截器用来解决表单重复提交的问题, 什么情况下会造成表单重复提交
典型的场景:
配置
<action name="tokenPrepare" class="org.apache.struts2.showcase.token.TokenAction" method="add">
<result name="input">add.jsp</result>
</action>
<action name="transfer" class="org.apache.struts2.showcase.token.TokenAction">
<result name="invalid.token">doublePost.jsp</result>
<result type="redirect" name="success">list.jsp</result>
</action>
一个TokenAction处理了表单提交逻辑后dispatcher到一个list.jsp页面。 用户如果刷新list页面时会出现重复提交表单问题
原因: struts2默认 dispatcher 为 内部重定向, 及 forward形式, 属于服务器端重定向
解决方法:
add.jsp表单内增加 <s:token/> 标记
transfer增加 token拦截器
<action name="transfer" class="org.apache.struts2.showcase.token.TokenAction">
<interceptor-ref name="token"/>
<result name="invalid.token">doublePost.jsp</result>
<result name="success">list.jsp</result>
</action>
原理:
<s:token/> 使得访问add.jsp时会在session中设置一个struts.token值
add.jsp表单中增加两个隐藏字段, 如:struts.token值随机生成
<input type="hidden" value="struts.token" name="struts.token.name">
<input type="hidden" value="FKZCDK5XC881W05MLVK0JQJP04M0KZC2" name="struts.token">
提交表单到 transfer Action时先会经过token拦截器, token拦截器会从form表单中获取struts.token值, 再从session中获取
struts.token值, 比较两个值是否相同, 不相同, 直接返回 invalid.token(invalid.token应配置成重复提交表单的提示信息页面)
相同,remove掉session里的 struts.token值(防止被重复使用), 继续正常流程
方法二:
对于表单操作, 重定向方式改成redirect就不会造成重复提交表单了。
<action name="transfer" class="org.apache.struts2.showcase.token.TokenAction">
<result name="invalid.token">doublePost.jsp</result>
<result type="redirect" name="success">list.jsp</result>
</action>
分享到:
相关推荐
在Web表单提交中,防止重复提交是一个常见的需求,而Struts2的Token机制就是为了应对这一问题而设计的。Token机制能确保用户只能提交一次表单,避免了由于网络延迟或误操作导致的重复数据录入。 ### 一、Token机制...
下面将详细阐述Struts2中Token机制的工作原理、配置以及使用方法。 1. Token机制概述: Token机制是通过在客户端(浏览器)和服务器之间传递一个唯一的标识符(Token)来防止表单的重复提交。当用户首次提交表单时...
Struts2提供了一种机制,即tokenSession,来解决这个问题。 首先,我们要理解什么是重复提交。在Web环境中,由于网络延迟或用户误操作,可能会导致同一个表单数据被多次提交,这就是重复提交。这种现象可能导致数据...
为了解决这个问题,Struts提供了一个名为“Token”的机制。 **一、Struts Token机制** Struts的Token机制主要用来防止用户意外或恶意的多次提交表单,例如在刷新页面时重复提交数据。它的工作原理如下: 1. **...
首先,我们需要在Struts2的配置文件(struts.xml)中添加Token拦截器。这个拦截器会处理Token的生成和验证过程。例如: ```xml <interceptor name="token" class="org.apache.struts2.interceptor....
Struts2是一个非常著名的Java Web框架,用于构建企业级应用。这个名为"struts2开发 token.rar"的压缩包文件可能包含了一个关于...通过研究和实践,开发者能够更好地理解Struts2的架构和工作原理,提升自己的开发技能。
2. 实现TokenAware接口:为了让ActionForm能够访问session中的令牌,需要让ActionForm实现`org.apache.struts.action.TokenAware`接口,并实现`setToken(String token)`方法。 3. 生成令牌:在Action中,如`execute...
二、Token机制的原理 Token机制的核心思想是在客户端和服务器之间创建一个一次性使用的凭证。当用户提交表单时,服务器会生成一个唯一的Token,并将其存储在一个临时的会话属性中,同时将其返回给客户端(通常是隐藏...
2. **传递Token**: 同时,该Token会被嵌入到表单中作为一个隐藏字段,以便于客户端提交时携带。 3. **验证Token**: 用户提交表单后,服务器会检查请求中的Token值是否与保存在Session中的Token值相匹配。 4. **更新...
#### 一、Token机制原理 Token机制是一种常见的防止重复提交的方法,其核心思想是为每一次表单提交生成一个唯一的Token值,并将这个Token值存储在客户端(通常是在表单中作为一个隐藏字段),同时也在服务器端记录...
Struts Token Dozer实例主要涉及的是Java开发中的两个关键组件:Apache Struts和Dozer。Apache Struts是一种广泛使用的开源MVC(Model-View-Controller)框架,它为Java Web应用程序提供了一种组织代码和控制应用...
下面将详细介绍Struts Token的工作原理、实现方式及其重要性。 一、工作原理 Struts Token机制的核心思想是在客户端(浏览器)和服务器端(应用服务器)之间维持一个唯一的令牌(Token)。当用户首次提交表单时,...
下面将详细解释Struts Token的工作原理、应用场景以及如何在实际项目中实现。 Token机制的核心思想是在用户发起敏感操作时,服务器生成一个随机的、一次性使用的Token,并将其存储在服务器端和客户端(通常为...
- **内置拦截器**:Struts2提供了一系列内置拦截器,如`params`(参数填充)、`token`(防止重复提交)、`servletConfig`(获取Servlet配置信息)等。 - **自定义拦截器**:可以通过实现`Interceptor`接口或继承`...
- **org.apache.struts2.components**:封装视图组件,Struts2在视图组件上做了很大加强,新增了多个组件,如`updownselect`、`doubleselect`、`datetimepicker`、`token`、`tree`等。 - **org.apache.struts2....
Struts 1.2 是一个经典的Java Web框架,它在早期Web开发中广泛使用。本话题将探讨如何在Struts 1.2中利用Token机制来解决HTTP请求的...同时,深入研究源码有助于加深对Struts工作原理的理解,提升问题排查和优化能力。
1. **配置Struts2拦截器**:在struts.xml配置文件中,需要添加`token`和`tokenSession`拦截器到默认栈或自定义的拦截器栈中。`token`拦截器负责在表单中插入令牌,而`tokenSession`拦截器则负责验证令牌。 ```xml ...
在深入理解Struts2的工作原理时,源码分析是必不可少的步骤。Struts2的核心设计理念和设计模式相比Struts1.x有了显著的变化,这使得它成为一个独立且成熟的框架。 首先,Struts2的架构基于WebWork的核心,这意味着...
#### 二、Token机制的原理 为了解决这一问题,一种常见的做法是在客户端(通常是浏览器)和服务器端之间传递一个随机生成的唯一标识符(Token)。当用户首次提交表单时,服务器会验证该Token是否有效。如果Token...