zoukankan      html  css  js  c++  java
  • Struts2><s:token />标签防止重复提交

    一、防止重复提交原理:
    首先
    ,在页面访问的时候server端产生一个标志位,其保存在session中,同时该标志位放到访问的页面的某个元素中(通常为隐藏域);
    其次,在session存在的有效时间内,没有其它操作时其值保持不变,当提交表单到server端时,会判断client端提交过来的标志位和server端的标志位的值是否相等;
    最后,判断标志位的值,如果相等,则执行自己期望的操作;如果不相等,则转向指定的页面;

    1、JSP使用< s:token/ >标签的时候,Struts2会建立一个UUID(全局唯一的字符串)放在session中,并且会成为一个hidden放在form中。 如

    <input type="hidden" name="struts.token" value="DP6WFZ8K88OA7FBT15A7V73VJRZ9KXQA" />

    2、token拦截器会判断客户端form提交的token值和session中保存的值是否equals。如果equals则执行Action。否则拦截器直接返回invaid.token结果转向对应的视图,Action对应的方法也不会执行;

    二、例子

    input.jsp(方法为get时候,刷新浏览器不提示重新发送,可能会重复提交)

      <form action="user" method="get">
        	name:<input name="name">
        	age:<input name="age">
        	<input type="submit" value="add">
        	<s:token></s:token>
        </form><br>

    上面的form对应页面生成的源代码(右键,查看源代码)

     <body>
        <form action="user" method="get">
        	name:<input name="name">
        	age:<input name="age">
        	<input type="submit" value="add">
        	<input type="hidden" name="struts.token.name" value="struts.token" />
    <input type="hidden" name="struts.token" value="DP6WFZ8K88OA7FBT15A7V73VJRZ9KXQA" />
        </form><br>
      </body>

    struts.xml

    <struts>
    	<constant name="struts.devMode" value="true"></constant>
    	<package name="test" namespace="/" extends="struts-default">
    
    		<action name="input" class="com.bjsxt.action.InputAction">
    			<result>/input.jsp</result>
    		</action>
    
    		<action name="user" class="com.bjsxt.action.UserAction">
    			<result>/addOK.jsp</result>
    			<interceptor-ref name="defaultStack"></interceptor-ref>
    			<interceptor-ref name="token"></interceptor-ref>
    			<result name="invalid.token">/error.jsp</result>
    		</action>
    
    	</package>


     

  • 相关阅读:
    【转】 java中Class对象详解和类名.class, class.forName(), getClass()区别
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    107. Binary Tree Level Order Traversal II
    109. Convert Sorted List to Binary Search Tree
    108. Convert Sorted Array to Binary Search Tree
    110. Balanced Binary Tree
    STL容器迭代器失效问题讨论
    113. Path Sum II
    112. Path Sum
  • 原文地址:https://www.cnblogs.com/xqzt/p/5637197.html
Copyright © 2011-2022 走看看