文档章节

Struts2----><s:token />标签防止重复提交

小强斋太
 小强斋太
发布于 2016/11/09 20:08
字数 434
阅读 4
收藏 0

一、防止重复提交原理:
首先
,在页面访问的时候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>


 

 

本文转载自:http://www.cnblogs.com/xqzt/archive/2012/09/03/5637197.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
私信 提问
表单重复提交处理总结

一、重复提交的处理方式 1.在进行请求之后重定向到查询或者其他不操作数据库的请求 2.将页面事件执行的按钮置灰,防止重复点击触发请求 3.自定义设置token,在请求之前将随机的token值放入s...

liuxw0226
2015/12/22
147
0
struts2防止重复提交

用户重复提交表单在某些场合将会造成非常严重的后果。例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消...

李永china
2016/05/16
13
0
struts2令牌(token)内部原理

小菜最近接触了struts2中的令牌知识,由于该知识点比较重要,因此想弄明白些,于是满怀信心的上网查阅资料,结果让小菜很无奈,网上的资料千篇一律,总结出来就一句话:“访问页面时,在页面...

thinkyoung
2014/12/17
0
0
为什么struts2中配置token后,第一次访问就告诉我已经提交过

我需要删除一些用户信息,避免删除重复提交,就用struts2的标签,但是,我只要进入到有在加标签的jsp中,点击注册了监听方法的按钮,就会说我是重复提交。郁闷死我了,求高手帮忙解决啊!具体...

www520507
2012/03/16
1K
0
struts--token防止表单重复提交(源码分析)

表单重复提交 1、造成重复提交主要的两个原因: (1) 一是,服务器处理时间久。当用户在表单中填完信息,点击“提交”按钮后,由于服务器反应时间过长没能及时看到响应信息,或者出于其它目...

cookqq
2012/11/28
0
4

没有更多内容

加载失败,请刷新页面

加载更多

eslint rules 规则

'rules': { "comma-dangle": ["error", "never"], //是否允许对象中出现结尾逗号 "no-cond-assign": 2, //条件语句的条件中不允许出现赋值运算符 "no-console": 2, //不允许出现console语句 ...

agenyun
15分钟前
0
0
类型判断时instanceof和equals的不同用法

接口设计时为了避免序列化的麻烦,将接口定义为参数为map<String,String>类型的接口,但是现在调用时需要转换当前的实体Bean为Map,接口接收方再把Map转换为另一个Bean实体。过程中的需要对类...

wangtx
21分钟前
0
0
vue 组件间传值(个人精编)

1.父组件向子组件传值 1⃣️.子组件标签绑定需要传递的参数名2⃣️.子组件页面使用props 接收参数 2.子组件向父组件传值  1⃣️.子组件使用$emit来触发一个自定义事件,并传递一个参...

MrBoyce
31分钟前
1
0
(荷兰)彼得·冯·门施著:博物馆学研究的目的

博物馆学研究的目的 (荷)彼得·冯·门施 尽管诸多关于博物馆学认知目的的不同看法可以被归纳为数个主要群体,但没有一个群体可以被称为“学派”。一般来说,学派是由于博物馆学研究目的的不...

乔老哥
41分钟前
2
0
Vue slot的用法

之前看官方文档,由于自己理解的偏差,不知道slot是干嘛的,看到小标题,使用Slot分发内容,就以为 是要往下派发内容。然后就没有理解插槽的概念。其实说白了,使用slot就是先圈一块地,将来...

peakedness丶
53分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部