网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> Java编程 >> 文章正文
  EasyJWeb中防重复提交使用及原理            【字体:
EasyJWeb中防重复提交使用及原理
作者:佚名    文章来源:不详    点击数:    更新时间:2007-9-2    


1、开启自动防提交功能
如果你的模块中需要防止重复提交的地方比较多,则可以使通过配置文件开启自动防提交功能。
正在装载数据……
如下面的Module配置:

 <!--文章来源-->
  
<module name="newsSource" path="/newsSource" form="" scope="request"
   action
="com.easyjf.cms.mvc.NewsSourceManageAction"
   defaultPage
="list" autoToken="true"> 
  
</module>

  开启了自动防重复提交功能后,只需要在要防重复提交的html表单中加上$html.token标签。而在Action中不用写任何与防提交有关的代码,系统自动就具会具有防重复提交的功能。

2、手动控制防提交
当然,如果不想使用自动防提交,则可以手动在Action中写代码控制重防提交。
比如在一个文章来源的Action中,在添加方法中:

public Page doAdd(WebForm form, Module module) {
  saveToken();
  
return module.findPage("edit");
}

在保存对象的Action中,需要验证该令牌是否合法:
public Page doSave(WebForm form, Module module) {
If(
!isVaildateToken()){
form.addResult(
"msg","请求已经处理,请不要重复提交");
return new Page("add","/cms/newsSourceEdit.html");
}

  NewsSource ns 
= new NewsSource();
form.toPo(ns);
  Long ret 
= this.service.addNewsSource(ns);
  
return this.doList(form, module);
 }
 

并在添加对象的页面的html表单Form中添加一句:
$html.token
就完成了整个防止重复提交的功能。

注意:不管使用哪一种方式,一定要记得在相关html表单中加上$html.token这个标识。如下:

<form method=”post” >
$html.token
</form>

 

3、实现原理分析
  EasyJWeb中防止重复提交的处理过程类似于Struts的方法,采用的是令牌机制。其思路为在Action中使用AbstractCmdAction中提供的saveToken()方法来产生一个由sessionId和当前时间组成的令牌值,并将该令牌值保存在session中。在页面的表单中使用$html.token产生一个带有该token值的hidden域,在请求提交后,在处理请求的Action中使用AbstractCmdAction提供的isVaildateToken()方法来验证令牌是否合法。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌或者清空令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。
重点是:
  第一、在请求中有session中同样的令牌值,请求中的令牌值通过表单中的隐藏字段来保存,保存的形式如: <input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="6aa35341f25184fd996c4c918255c3ae">,这个value是TokenProcessor类中的generateToken()获得的,是根据当前用户的session id和当前时间的long值来计算的,并且是通过调用$html.token来自动产生的,在struts中是依赖其<html:form>标签产生的,而在EasyJWeb中,你需要显式的在Form里面调用。
  第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。
 




本文来源:http://blog.csdn.net/easyjf/archive/2007/08/29/1764287.aspx
站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     用java实现web服务器
     用java快速开发linux gu…
     正则表达式分解siemens交…
     [portal参考手册]目录
     jsp中调用oracle存储过程…
  • JSP中JavaBean的生命周期

  • Java Swing实现俄罗斯方块

  • HashTable和HashMap; Vecto…

  • Hashtable 排序

  • weblogic 9.1的domain配置my…

  • 保留weblogic 中jsp编译后生…

  • Ant入门-配置和使用     选…

  • javabean+mysql数据库连接池

  • JavaWeb中的Session、Sessio…

  • tomcat下配置jspservletbean…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David