Struts2之Session Token机制理解及使用

一、学习案例:关于表单重复提交的问题,其实没什么可讲的,这个功能可以说很鸡肋,特别在现在的项目中很少会用,实际意义不大,之所以讲,是为了引出拦截器,给下一章学习拦截器做个铺垫,大家就当看杂文一样,随便瞟几眼就OK。

二、案例分析:token机制很类似于验证码的实现方式,当页面请求扫描到<s:token/>便签时就会调用标签处理类,而标签处理类会生成一个随机数返回给页面,另外在服务器端拷贝一份也就是防止session中,当请求到达服务器后,就会对比两个字符串,相等则通过,不相等证明是重复提交则跳转到错误页面。和验证码最大的区别就是,重复提交的的意思是在第一次提交成功后,在成功后的页面做刷新操作或按浏览器返回按钮在不刷新当前页面的前提下再次提交则会触发token重复提交机制,也就会跳转向重复提交失败页面。

a)在提交页面的form表单中添加<s:token/>标签。

b)在struts.xml中的表单提交向的action中配置

<result name=”invalid.token”>/提交失败页面.jsp</result>

name是struts2官方规则,千万别写错。

c)在b步骤的action中添加拦截器

<interceptor-inf name=”token”></interceptor>

<interceptor-inf name=”defaultStack”></interceptor>

顺序不能错。

意思是:token机制是发生在数据赋值、类型转换等拦截器之前的。这样才能防止数据重复提交。

三、经验之谈:

a)还是那句话学习框架一定要经常看源码。源码都是前辈大牛的心血,无论是编码形式还是编码质量那都是相当的高,有这样一份珍贵的学习资料,你不看,你说你还看啥吧。

b)防止表单重复提交有很多方法,比如上一章的重定向就可以防止。不过在项目中一般我们有很多种方法防止表单重复提交。我最钟爱的就是让提交按钮失效,当点击提交按钮后,我们就通过js让按钮直接失效,这样就不会有人乱点了。

c)写程序就跟玩游戏一样,千万别钻牛角尖。我们始终要坚信,语言是万能的。所以有时候一种方式不行就换一种,问题终会解决的。比如我今天为了搞301,让23hhr.com重定向到www.23hhr.com。整了一上午,在网上各种文章都扒了,各种方法都试了,结果就是不行。网上说的最多的就是配置.htaccess。我用的apache发向代理的tomcat,apache怎么配置就是不访问.htaccess。最后实在没招了,我就在vhost.cfg直接配置,它就行了。所以有时候,我们要善于动手实验,光靠想是想不出来什么的。

四、参考项目:token机制过于简单不提供项目参考,按分析配置就OK了。

五、每日一乐:

追女神很久了,今天终于成功了,女神问我什么感觉,

我说觉得有点不敢相信,她说,不信你捏自己脸,我照做了,然后我醒了……

最终解释权归爱尚合伙人所有,转载请注明出处。

时间: 2024-10-16 09:40:36

Struts2之Session Token机制理解及使用的相关文章

(转载)session token机制

http://blog.chinaunix.net/uid-26642709-id-3061264.html 使用session token时,必须用struts2表标签库,不能用html 通过session token防止重复提交: 当客户端请求页面时,服务器会通过token标签生成一个随机数,并且将随机数放置到session当中,然后将随机数发向客户端:如果客户第一次提交,那么浏览器会将该随机数发往服务器,服务器端会接收到该随机数并且与session中所保存的随机数进行比较,这时两者的值是相

atitit. access token是什么??微信平台公众号开发access_token and Web session保持状态机制

atitit. access token是什么??微信平台公众号开发access_token and Web session保持状态机制 1. token机制and  session保持状态机制 1 2. access token是什么?? 1 3. 为什么需要access token 2 4. 需不需要保存access_token,如何保存??? 2 5. access_token在何时被创建 2 6. 为什么不直接使用appid保持状态 2 7. access_token的过期问题 3 8.

Struts2框架之application、Request、Response、paramaters、Session实现及理解(案例驱动)

Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具.Cacti是通过 snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数.它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构.host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善.界面友好.软件 Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量

javaEE开发中使用session同步和token机制来防止并发重复提交

javaEE开发中使用session同步和token机制来防止并发重复提交 通常在普通的操作当中,我们不需要处理重复提交的,而且有很多方法来防止重复提交.比如在登陆过程中,通过使用redirect,可以让用户登陆之上重定向到后台首页界面,当用户刷新界面时就不会触发重复提交了.或者使用token,隐藏在表单中,当提交时进行token验证,验证失败也不让提交.这都是一般的做法. 我们这次碰到的问题是重复提交本身就是一个错误,重复提交会导致一些相关数据的逻辑不再正确.而这些重复提交并不是通过普通的刷新

Cookie,Session和Token机制和区别.

1.背景介绍 由于HTTP是一种无状态协议,服务器没有办法单单从网络连接上面知道访问者的身份,为了解决这个问题,就诞生了Cookie Cookie实际上是一小段的文本信息.客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie 客户端浏览器会把Cookie保存起来.当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器.服务器检查该Cookie, 以此来辨认用户状态.服务器还可以根据需要修改Cookie的内容. 实际就是颁发

cookie,session,token的定义及区别

参考了很多文章总结的. 1.cookie(储存在用户本地终端上的数据) 服务器生成,发送给浏览器,浏览器保存,下次请求同一网站再发送给服务器. 2.session(会话) a.代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的. b.cookie中存放着一个sessionID.请求时会发送这个ID. c.session因为请求(request对象)而产生. d.session是一个容器,可以存放会话过程中的任何对象. e.session的创建和使用总在服务端,而浏览器从来都没得

[转]Struts2数据传输的背后机制:ValueStack(值栈)

1. 数据传输背后机制:ValueStack(值栈) 在这一切的背后,是因为有了ValueStack(值栈)! 2. ValueStack基础:OGNL 要了解ValueStack,必须先理解OGNL(Object Graphic Navigatino Language)! OGNL是Struts2中使用的一种表达式语言,它可以: ①用于JSP的标签库中,以便能够方便的访问各种对象的属性: ②用于界面将参数传递到Action(并进行类型转换)中: ③用于struts2的配置文件中! 所以,非常有

Strut2 采用token机制防御CSRF同时也可以防止表单重复提交

一 未配置Struts2 token的情况下测试 1.从表单提交数据,可以从下图看出,快速点击保存按钮,请求提交了两次 2.检查post提交的数据中未含有token参数 3.查看数据列表,有重复数据 4.将刚才的请求由post请求转换为get请求(CSRF攻击),从下图可以看出请求成功 二 配置Struts2 token值后再次测试 1. 在工程中的Struts文件中配置token机制,针对新增与修改的form请求 2.在页面头部添加<%@ taglib uri="/struts-tags

cookie session token 之间的区别

cookie 和session的区别 1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 考虑到安全应当使用session. 3.session会在一定时间内保存在服务器上.当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用COOKIE. 4.单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie. token 和session