`

struts2 避免重复提交的token 的用法

阅读更多
1、使用Struts2的表单标签,其中需要增加token标签。如下:
……
<%@ taglib uri="/struts-tags" prefix="s" %>
……
<s:form action="page1" theme="simple">
<s:datetimepicker name="order.date" label="购买日期" toggleType="explode" value="today"/><br/>
<s:token/>
<s:reset/><s:submit/>
   </s:form>

2、在struts配置文件中增加token拦截器。(token 和 token-session 拦截器的启用,是在 struts.xml 配置文件中,既可以为包启用,也可以单独为某个 action 启用)
2.1  为 Action 启用 token
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

<package name="lee" extends="struts-default">
<action name="page1" class="org.bruce.Page1">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token" />
<result>/page1.jsp</result>
<result name="invalid.token">/page1error.jsp</result>
</action>
</package>
</struts>

2.2 为包启用 token

注意,需要name为invaid.token的result。这是当拦截器判断是重复提交的时候,会转向的结果。
<package name="lee" extends="struts-default">
<interceptors>
      <interceptor-stack name="myStack"> 
      <interceptor-ref name="token"/> 
      <interceptor-ref name="defaultStack" />       
      </interceptor-stack> 
  </interceptors>
<default-interceptor-ref name="myStack" /> 
  <action name="page1" class="org.bruce.Page1">
    <result>/page1.jsp</result>
    <result name="invalid.token">/page1error.jsp</result>
  </action>

</package>


3、invaid.token页面打印错误信息,一样可以使用struts标签。如下:
<s:actionerror/>

理解:
1、JSP使用<s:token/>标签的时候,Struts2会建立一个GUID(全局唯一的字符串)放在session中,并且会成为一个hidden放在form中。
2、token拦截器会判断客户端form提交的token和session中保存的session是否equals。如果equals则执行Action。否则拦截器直接返回invaid.token结果,Action对应的方法也不会执行

PS:根据笔者经验,要做的完美,还应该添加如下
<result name="input" type="freemarker">
   /WEB-INF/ftl/nt/new_story_post.ftl
</result>
这个是如果出错,返回的提示页,一般返回原来的页

另外,如果用户(一般指比较有“技术”的用户,嘿嘿)直接访问表单的action,也就是处理用户提交内容的action,这个ACTION也是配置了token的action,这个invalid.token视图,也应该指向该表单页面。例如
<result name="invalid.token" type="freemarker">
/WEB-INF/ftl/nt/new_story_post.ftl(这个就是表单页)
</result>
分享到:
评论

相关推荐

    Struts2防止重复提交解决方案

    这里,`defaultStack`包含了Struts2的默认拦截器,`token`拦截器被添加到栈中,并且设置了`includeMethods`参数,指定了哪些方法需要进行重复提交检查。 2. **创建令牌**:当用户首次访问包含表单的页面时,服务器...

    Struts 之旅 - 重复提交 token

    在 Struts 中,"重复提交 token" 是一个重要的概念,用于防止用户意外或恶意地多次提交同一个表单,从而确保数据的一致性和安全性。 在 Web 应用中,重复提交问题可能出现在用户网络不稳定或误操作的情况下,导致同...

    JavaEE Struts2利用tokenSession防止重复提交

    总结,Struts2的tokenSession机制是JavaEE Web开发中防止重复提交的有效手段,通过生成并校验token,确保每个请求的唯一性,从而保护了业务数据的完整性。在实际项目中,我们需要正确配置和使用这个机制,以提高应用...

    Struts2解决表单重复提交

    这样,当发生重复提交时,Struts2框架会自动处理并转向token.jsp页面,提示用户重复提交了表单。 对于第二种原因,即提交表单后刷新浏览器页面导致的重复提交,Struts2框架允许开发者通过配置结果视图的跳转方式来...

    sturts2防止表单的重复提交 token

    总的来说,Struts2的Token机制是一种有效防止表单重复提交的方法,它通过生成和验证唯一标识来确保每个请求的唯一性,从而保护了业务的正确性和数据的一致性。在实际开发中,根据项目需求和安全策略,我们可以灵活...

    struts token机制解决表单重复提交

    总的来说,Struts Token机制通过维护一个临时的、一次性使用的Token,有效地解决了Web应用中的表单重复提交问题,提高了系统的稳定性和安全性。在实际开发中,应根据项目需求灵活运用并优化此机制。

    struts2中token限制表单多次提交

    下面将详细阐述Struts2中Token机制的工作原理、配置以及使用方法。 1. Token机制概述: Token机制是通过在客户端(浏览器)和服务器之间传递一个唯一的标识符(Token)来防止表单的重复提交。当用户首次提交表单时...

    struts2的token实现.

    在Web表单提交中,防止重复提交是一个常见的需求,而Struts2的Token机制就是为了应对这一问题而设计的。Token机制能确保用户只能提交一次表单,避免了由于网络延迟或误操作导致的重复数据录入。 ### 一、Token机制...

    struts token 防止页面刷新,重复提交

    为了避免这种情况的发生,Struts框架提供了内置的Token机制来防止重复提交。 #### 一、Token机制原理 Token机制是一种常见的防止重复提交的方法,其核心思想是为每一次表单提交生成一个唯一的Token值,并将这个...

    利用struts的token控制重复提交

    通过以上方法,Struts的Token机制能有效防止Web应用中的重复提交问题,确保数据的准确性和一致性。不过,随着技术的发展,现代框架如Spring Boot等提供了更先进的解决方案,例如CSRF(跨站请求伪造)保护,可以考虑...

    Struts之Token解决表单那重复提交

    在Struts配置文件中,为需要防止重复提交的Action添加一个拦截器引用,如`token`或`token-session`。这两个拦截器都可以处理Token,但`token-session`更安全,因为它会将Token存储在会话中,而不仅仅是请求中。 2....

    Struts2防止重复提交的解决方案

    - Struts2提供了一些内置拦截器,如`Token`拦截器,可以直接配置使用这些拦截器来防止重复提交。 4. **结合客户端JavaScript**: - 使用JavaScript禁用提交按钮或者通过AJAX异步提交表单,从而避免用户误操作导致...

    解决Struts重复提交

    Struts2提供了一种基于Token的防止重复提交策略。在表单提交时,服务器会生成一个唯一的Token并将其存储在Session中,同时将Token放入到表单中。当用户提交表单时,服务器会检查提交的Token是否与Session中的Token...

    Struts2_表单的重复提交问题

    Struts2提供了一种简单有效的方法来解决表单重复提交的问题,即通过使用`&lt;s:token&gt;`标签和相关的拦截器。 1. **实现原理**: - 在每次表单提交前,Struts2会生成一个唯一的令牌(Token),并将其存储在用户的Session...

    struts1.2之token解决重复提交

    Token机制是一种防止重复提交的方法,它通过在客户端(通常是浏览器)和服务器之间交换一个唯一的、一次性使用的令牌来确保请求的独特性。当用户提交表单时,服务器会生成一个随机的Token并将其存储到会话(Session...

    利用Token机制解决重复重复提交

    - 完成对表单数据的处理后,调用`resetToken()`方法清除`HttpSession`中的Token值,避免重复提交。 #### 四、非Struts框架下的Token机制实现 对于非Struts框架的应用程序,也可以采用类似的Token机制来防止表单...

    用struts使用Token机制来实现防重复提交

    通过以上步骤,我们就能在Struts2框架下有效地防止重复提交。Token机制结合前端的防御措施,能为Java Web应用程序提供更加健壮的安全保障。在实际项目中,还可以根据需求进行更精细的定制,比如设置Token的有效时间...

Global site tag (gtag.js) - Google Analytics