防止多次提交表单,见表单:
<s:form action="formAction">
<s:bean name="com.test.service.BookService" id="bs"></s:bean>
<s:checkboxlist list="#bs.books" label="请选择喜欢的图书" name="b" listKey="author"
listValue="name" labelposition="top"></s:checkboxlist>
<s:token/>
<s:submit value="提交"/>
</s:form>
加入<s:token/> 还要在<action>中定义拦截器
<action name="formAction" class="com.test.action.FormAction">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="token"/>
<result>success.jsp</result>
<result name="invalid.token">/error.jsp</result>
</action>
但拦截器判断为重复提交,则返回invalid.token,转到error.jsp
理解:
1、JSP使用<s:token/>标签的时候,Struts2会建立一个GUID(全局唯一的字符串)放在session中,并且会成为一个hidden放在form中。
2、token拦截器会判断客户端form提交的token和session中保存的session是否equals。如果equals则执行Action。否则拦截器直接返回invaid.token结果,Action对应的方法也不会执行
分享到:
相关推荐
如果用户尝试多次提交相同的表单,`token`拦截器会检测到无效的令牌,并跳转到配置的错误页面(例如`/invalidToken.jsp`)。 #### 五、总结 本文详细介绍了如何在Struts2框架中使用`<s:token/>`标签和`token`拦截器...
防止表单重复提交是Web开发中的重要安全措施,以避免用户意外或恶意地多次提交同一表单。在Struts2中,可以使用`Token Interceptor`来实现这一功能。在表单中添加`<s:token>`标签,例如: ```html <s:form action=...
总之,防止重复提交是Web应用开发中的重要一环,可以通过Struts2提供的 `<s:token>` 标签结合拦截器,或者结合客户端验证和服务器端状态管理等多种方式来实现。正确实施这些措施,可以有效避免数据的不一致性,提高...
Struts的Token机制主要用来防止用户意外或恶意的多次提交表单,例如在刷新页面时重复提交数据。它的工作原理如下: 1. **生成Token**: 当用户访问一个需要防重复提交的表单时,服务器会生成一个唯一的Token并将其...
在开发Web应用时,防止表单的多次提交是一个常见的需求,这可能导致数据重复或者逻辑错误。Struts2提供了Token插件来解决这个问题,确保每个表单提交只能被执行一次。下面将详细阐述Struts2中Token机制的工作原理、...
<s:token/> </s:form> ``` 4. **验证令牌**:当用户提交表单时,Struts2的拦截器会自动检测令牌。如果令牌有效,请求会被处理;如果令牌已经被使用或不存在,将会抛出异常,如`TokenException`。 5. **处理异常...
<s:token/> <input type="submit" value="提交"/> </form> ``` 4. 验证令牌 当用户提交表单时,Struts的`token`拦截器会自动检测令牌,如果令牌无效(例如,重复提交或CSRF攻击),则会抛出异常。在Action类中,...
<s:token name="struts.token.name" /> <input type="hidden" name="struts.token.name" value="%{#session['struts.token.name']}" /> ``` 3. **配置Action**: 在Struts的配置文件(例如`struts.xml`)中,为...
在Web应用中,用户可能会无意或有意地多次点击提交按钮,导致服务器接收到重复的请求,这可能会对数据库或其他后端服务造成不必要的负担,甚至可能导致数据不一致。为了解决这个问题,Struts提供了StrutsToken机制。...
2. 提高数据一致性:避免因多次提交导致的数据冲突和错误。 3. 安全性:防止恶意用户通过自动化工具快速、大量提交请求。 五、注意事项 1. Token的有效性:通常Token需要设置一定的有效期,防止用户长时间未提交而...
在Web应用中,用户可能会意外或恶意地多次点击提交按钮,导致表单数据被重复提交,这会引发一系列问题,比如数据库数据异常、业务逻辑错误等。为了解决这个问题,Struts提供了一种称为“同步令牌”(Synchronizer ...
<s:token name="user.token"></s:token> ``` 这里`<s:token>`标签的作用是在页面上生成一个隐藏字段,其值即为`session`中存储的令牌值。`name`属性指定了令牌在`session`中的名称。 ##### 2. 表单提交时的验证 当...
Struts Token机制是一种防止表单重复提交的有效策略,尤其在处理关键操作时,如金融交易或数据修改,防止用户意外或恶意多次点击提交按钮导致的数据重复性问题。下面将详细介绍Struts Token的工作原理、实现方式及其...
在Web环境中,由于网络延迟或用户误操作,可能会导致同一个表单数据被多次提交,这就是重复提交。这种现象可能导致数据不一致,对业务逻辑造成严重干扰。例如,在银行转账操作中,如果一个转账请求被重复提交,可能...
如果同一个表单被多次提交,只有第一次提交的Token会被接受,后续的提交因为Token无效而被拒绝。 以下是使用Struts实现Token机制的详细步骤: 1. **配置Struts2拦截器**: 首先,我们需要在Struts2的配置文件...
在配置示例代码中,开发者需要在login.jsp页面中加入<s:token></s:token>标签,并确保表单提交到对应的Action,如LoginAction。在Struts2的配置文件struts.xml中,需要配置action,并引用token拦截器和defaultStack...
- 在表单中加入一个隐藏字段(如`<s:token />`),每次提交表单时都会包含这个token值。 - 服务器端在接收到请求后会验证这个token值的有效性,如果验证通过,则继续处理;如果不通过,则拒绝处理。 - 每次提交后...
<input type="hidden" name="struts.token" value="<s:property value="#session.token"/>" /> ``` 4. **验证Token** 在Action的`execute()`方法中,首先检查Token是否有效。如果Token已经存在于会话中并且与...
如果Token已经存在,那么表单会被视为重复提交,从而避免了多次执行相同操作的风险。 1. **添加Token到表单**:在JSP页面中,使用Struts2的标签库,插入`<s:token></s:token>`,这会在表单中生成一个隐藏的Token...