新随笔  :: 订阅 订阅  :: 管理

关于指令牌-一个有趣的帖子

Posted on 2009-04-14 16:06  redcoatjk  阅读(188)  评论(0编辑  收藏  举报

基本原理:

服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。

找一般的流程中插入个中间的action

多写一个actionnonoaction

nonoaction

this.saveToken(request); //设置指令牌

return 跳转到执行逻辑功能的action中如doaction

执行业务功能的action doaction

doaction

......

if(this.isTokenValid(request)) //如果指令牌相同

{.....

...实现功能的代码

this.resetToken(request);//取消指令牌

}else //执行else说明提交是重复提交

{

可以跳转回首页.并报错 如写

ActionMessages errors= new ActionMessagers();

errors.add(“token”,new ActionMessages(“token”)); //可以把错误信息写在资源文件中 然后显示

this.saveErrors(return.errors); //保持错误信息

跳转….

}