首页 > 代码库 > Struts2之Session Token机制理解及使用

Struts2之Session Token机制理解及使用

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

 

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

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

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

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

namestruts2官方规则,千万别写错。

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发向代理的tomcatapache怎么配置就是不访问.htaccess。最后实在没招了,我就在vhost.cfg直接配置,它就行了。所以有时候,我们要善于动手实验,光靠想是想不出来什么的。

 

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

 

五、每日一乐:

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

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

 

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

Struts2之Session Token机制理解及使用