文档章节

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

小强斋太
 小强斋太
发布于 2016/11/09 20:08
字数 434
阅读 4
收藏 0
点赞 0
评论 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 ⋅ 0

struts2防止重复提交

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

李永china ⋅ 2016/05/16 ⋅ 0

struts--token防止表单重复提交(源码分析)

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

cookqq ⋅ 2012/11/28 ⋅ 4

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

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

www520507 ⋅ 2012/03/16 ⋅ 0

struts2令牌(token)内部原理

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

thinkyoung ⋅ 2014/12/17 ⋅ 0

Struts2的学习笔记(3)

很久没发表了,不代表我没在学习struts2啊,对吧?好,下面还是把我的一些笔记供出来给大家参考指正吧? 1、Struts2应用的分层体系架构: 2、Struts2的模型驱动(Model Driven),之前所学的...

larch ⋅ 2012/04/13 ⋅ 0

在页面中使用WebWork的token标签解决表单重复提交问题

在页面中使用WebWork的token标签解决表单重复提交问题 王保政 我们的项目是基于Struts开发的,在设计时没有考虑重复提交的问题,所以用户在点击页面的提交,然后在下一个浏览器页面点后退,或...

迷途d书童 ⋅ 2012/03/09 ⋅ 0

struts2令牌机制

防止刷新提交页面,数据重复保存 在jsp页面的form里面加上 注意:要先访问到这个jsp页面,来给token初始的值,这样当你提交的时候,才能匹配上 刚进入jsp页面的时候,struts2会生成一个token...

长平狐 ⋅ 2013/01/06 ⋅ 0

在JSF2中的防止表单重复提交

在B/S系统开发过程中,关于如何防止表单的重复提交问题,也是一个老生常谈的问题,这里说说如何在JSF2的开发环境下防止表单重复提交。 问题解决的思路基本和struts的思路是一致的,那就是 1....

伪猫 ⋅ 2012/03/28 ⋅ 14

阻止页面重复提交公用方案

阻止用户刷新页面重复提交,使我们经常见得一个需要处理掉的问题,当然现在有些框架通过几个配置已经可以实现了阻止重复提交,比如struts2的令牌机制,但是感觉还是不太灵活,或者说不够通用...

寒冰蓝血 ⋅ 2012/07/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

20.zip压缩 tar打包 打包并压缩

6月25日任务 6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩 6.5 zip压缩工具: zip支持压缩目录 zip压缩完之后原来的文件不删除 不同的文件内容其实压缩的效果不一样 文件内有很多重复的用xz压...

王鑫linux ⋅ 15分钟前 ⋅ 0

double类型数据保留四位小数的另一种思路

来源:透析公式处理,有时候数据有很长的小数位,有的时候由在四位以内,如果用一般的处理方法,那么不足四位的小树会补充0到第四位,这样子有点画蛇添足的感觉,不太好看。所以要根据小数的...

young_chen ⋅ 22分钟前 ⋅ 0

Python 优化 回溯下降算法

使用sympy构造表达式,实现回溯下降算法 画出函数图像,先使用暴力搜索,找到最小值约为2.5左右 然后选定初始点,开始进行回溯搜索,下降方向为负梯度方向 下降的误差与步数大致呈现下面的状...

阿豪boy ⋅ 26分钟前 ⋅ 0

Django配置163邮箱出现 authentication failed(535)错误解决方法

最近用Django写某网站,当配置163邮箱设置完成后,出现535错误即:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') Django初始配置邮箱设置 EMAIL_HOST = "smtp.1...

陈墨轩_CJX ⋅ 28分钟前 ⋅ 0

用接口模拟可伸缩枚举(34)

1、枚举的可伸缩性最后证明都不是什么好点子 扩展类型的元素是基本类型实例,基本类型的实例却不是扩展类型的元素,很混乱 目前还没有很好的方法来枚举基本类型的所有元素,及其扩展 可伸缩性...

职业搬砖20年 ⋅ 31分钟前 ⋅ 0

Ubuntu18.04 IDEA快捷键无法使用

IDEA默认的回退到上一视图的快捷键是Ctrl + Alt + Left,在ubuntu中这个快捷键被占用了,在16.04中可以在界面中取消这个快捷键,但是18.04就看不到了,可以使用以下命令解决 gsettings set ...

Iceberg_XTY ⋅ 35分钟前 ⋅ 0

如何解决s权限位引发postfix及crontab异常

一、问题现象 业务反馈某台应用服务器,普通用户使用mutt程序发送邮件时,提示“postdrop warning: mail_queue_enter: create file maildrop/713410.6065: Permission denied”,而且普通用法...

问题终结者 ⋅ 48分钟前 ⋅ 0

Unable to load database on disk

由于磁盘空间满了以后,导致zookeeper异常退出,清理磁盘空间后,zk启动报错,信息如下: 2018-06-25 17:18:46,904 INFO org.apache.zookeeper.server.quorum.QuorumPeerConfig: Reading co...

刀锋 ⋅ 今天 ⋅ 0

css3 box-sizing:border-box 实现div一行多列

<!DOCTYPE html><html><head><style> div.container{ background:green; padding:10px 10px;}div.box{box-sizing:border-box;-moz-box-sizing:border-box; /* Fir......

qimh ⋅ 今天 ⋅ 0

Homebrew简介和基本使用

一、Homebrew是什么 Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径...

说回答 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部