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>


     

  • 相关阅读:
    病魔带来的礼物
    不可深交者
    做事情
    Maven-7:Maven配置编译的字符集方法
    maven打包可以行文件,包含依赖包等
    Maven打包可执行Jar的几种方法
    maven项目打包时生成dependency-reduced-pom.xml
    【Maven】maven打包生成可执行jar文件
    【Maven学习】Maven打包生成包含所有依赖的jar包
    【Maven学习】Maven打包生成普通jar包、可运行jar包、包含所有依赖的jar包
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5429472.html
Copyright © 2011-2022 走看看