`
阿尔萨斯
  • 浏览: 4203653 次
社区版块
存档分类
最新评论

EasyJWeb中防重复提交使用及原理

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>


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

<!--</span><span style="COLOR: #008000">文章来源</span><span style="COLOR: #008000">-->
modulename="newsSource"path="/newsSource"form=""scope="request"
action
="com.easyjf.cms.mvc.NewsSourceManageAction"
defaultPage
="list"autoToken="true">
module>

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

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

publicPagedoAdd(WebFormform,Modulemodule)...{
saveToken();
returnmodule.findPage("edit");
}

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

NewsSourcens
=newNewsSource();
form.toPo(ns);
Longret
=this.service.addNewsSource(ns);
returnthis.doList(form,module);
}

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

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

formmethod=”post”>
$html.token
form>

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

标签产生的,而在EasyJWeb中,你需要显式的在Form里面调用。
  第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。




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

<!--</span><span style="COLOR: #008000">文章来源</span><span style="COLOR: #008000">-->
modulename="newsSource"path="/newsSource"form=""scope="request"
action
="com.easyjf.cms.mvc.NewsSourceManageAction"
defaultPage
="list"autoToken="true">
module>

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

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

publicPagedoAdd(WebFormform,Modulemodule)...{
saveToken();
returnmodule.findPage("edit");
}

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

NewsSourcens
=newNewsSource();
form.toPo(ns);
Longret
=this.service.addNewsSource(ns);
returnthis.doList(form,module);
}

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

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

formmethod=”post”>
$html.token
form>

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

标签产生的,而在EasyJWeb中,你需要显式的在Form里面调用。
  第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。




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

<!--</span><span style="COLOR: #008000">文章来源</span><span style="COLOR: #008000">-->
modulename="newsSource"path="/newsSource"form=""scope="request"
action
="com.easyjf.cms.mvc.NewsSourceManageAction"
defaultPage
="list"autoToken="true">
module>

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

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

publicPagedoAdd(WebFormform,Modulemodule)...{
saveToken();
returnmodule.findPage("edit");
}

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

NewsSourcens
=newNewsSource();
form.toPo(ns);
Longret
=this.service.addNewsSource(ns);
returnthis.doList(form,module);
}

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

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

formmethod=”post”>
$html.token
form>

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

标签产生的,而在EasyJWeb中,你需要显式的在Form里面调用。
  第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。




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

<!--</span><span style="COLOR: #008000">文章来源</span><span style="COLOR: #008000">-->
modulename="newsSource"path="/newsSource"form=""scope="request"
action
="com.easyjf.cms.mvc.NewsSourceManageAction"
defaultPage
="list"autoToken="true">
module>

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

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

publicPagedoAdd(WebFormform,Modulemodule)...{
saveToken();
returnmodule.findPage("edit");
}

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

NewsSourcens
=newNewsSource();
form.toPo(ns);
Longret
=this.service.addNewsSource(ns);
returnthis.doList(form,module);
}

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

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

formmethod=”post”>
$html.token
form>

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

标签产生的,而在EasyJWeb中,你需要显式的在Form里面调用。
  第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。



分享到:
评论

相关推荐

    EasyJWeb实用开发指南——开始EasyJWeb

    EasyJWeb实用开发指南——开始EasyJWeb

    easyjweb1.2

    仅仅依靠一个灵活、简易的MVC核心引擎还不能最大限度的提高开发速度,因此EasyJWeb还提供了一个灵活、易用的代码生成引擎及工具,通过使用代码生成引擎,可以快速完成基于JavaEE平台的企业级应用程序生成。...

    EasyJWEB2.0

    EasyJWeb是基于java技术,用于实现企业级Java Web应用程序快速开发框架。框架由来自国内的EasyJF开源团队维护,是一个完全由来自的中国开源爱好者开发,文档及注释全部为中文的开源框架。

    EasyJWeb快速入门指南

    EasyJWeb快速入门指南,EasyJWeb 是一个让你开发 Java Web 应用程序变得容易及高效的框架,他是一个基于请求转发模型的 MVC 框架。本章将主要介绍如何使用 EasyJWeb 写一个简单的应用程序。

    easyjweb-2.0快速开发

    easyjweb-2.0 java 快速开发 easyjweb-2.0 java 快速开发 easyjweb-2.0 java 快速开发

    EasyJWeb开发指南

    框架设计构思来源于国内众多项目实践,框架的设计及实现借鉴当前主要流行的开源Web框架,如Rails、Struts、JSF、Tapestry等,吸取其优点及精华,是一个完全由来自的中国开源爱好者开发,文档及注释全部为中文的开源...

    EasyJWeb框架0.7.0

    EasyJWeb框架0.7.0

    EasyJWeb源码构建指南

    目前EasyJWeb已经采用国际水准的项目管理工具——Maven。Maven是一个功能强大的项目管理工具,在此处不做过多介绍,有兴趣的可以阅读Maven官方文档。 首先要确保你的计算机上已经安装了Maven2.0.5以上版本,如果还...

    EasyJWeb开发者指南

    EasyJWeb中的验证 21 实现自己的验证器 22 验证错误获彼此 23 EasyJWeb的错误处理 24 工具类 24 CommUtil 25 分页 25 tagUtil 26 验证码 26 容器部分 28 EasyJWeb的容器 28 IoC 28 EasyJWeb中的容器 28 集成其他容器...

    EasyJWeb入门手册

    可以让你easyjweb快速入门使用 EasyJWeb简介 EasyJWeb是基于java技术,能实现企业级Java Web应用程序快速开发的MVC框架。框架设计构思来源于国内众多项目实践,框架的设计及实现借鉴当前主要流行的开源Web框架...

    配置easyjweb项目

    配置easyjweb项目 ,要用到的细节,免于发生不必要的错误

    easyjweb说明文档

    easyjweb说明文档

    基于EasyJWeb框架和MVC模式的Web应用

    描述了MVC设计模式和EasyJWeb框架的组成和工作原理,然后通过一个客户管理系统实例论述了基于MVC模式EasyJWeb框架的Web应用系统的实现方法。通过实例论述了基于EasyJWeb框架开发的Web应用系统可获得较高的效率性、可...

    easyjweb-1.1

    一个轻量级的J2EE框架

    Easyjweb 1.2.2

    类似于struts的开发框架,但开发效率却是struts的N倍。这是2010年01月15日发布出来的最新的版本。

    基于B/S的邮件系统客户端软件,系统全部使用java编写,Web页面使用EasyJWeb框架开发,主要通过调用java mail

    基于B/S的邮件系统客户端软件,系统全部使用java编写,Web页面使用EasyJWeb框架开发,主要通过调用java mail实现邮件的收发。 基于B/S的邮件系统客户端软件,系统全部使用java编写,Web页面使用EasyJWeb框架开发,主要通过...

    EasyJWeb-Velocity脚本简明教程

    EasyJWeb-Velocity脚本简明教程

    easyjweb 开发文档

    仅仅依靠一个灵活、简易的MVC核心引擎还不能最大限度的提高开发速度,因此EasyJWeb还提供了一个灵活、易用的代码生成引擎及工具,通过使用代码生成引擎,可以快速完成基于JavaEE平台的企业级应用程序生成。...

    Easyjweb项目实例

    很好的Easyjweb学习资料及源码 包括载MyEclipse中的配置,数据库的配置等.很详细!

Global site tag (gtag.js) - Google Analytics