struts的Token机制解决表单的重复提交

struts的Token机制解决表单的重复提交

ID:40754961

大小:16.83 KB

页数:6页

时间:2019-08-07

struts的Token机制解决表单的重复提交_第1页
struts的Token机制解决表单的重复提交_第2页
struts的Token机制解决表单的重复提交_第3页
struts的Token机制解决表单的重复提交_第4页
struts的Token机制解决表单的重复提交_第5页
资源描述:

《struts的Token机制解决表单的重复提交》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、使用Struts的Token机制解决表单的重复提交    选择自chinaewolf的Blog关键字 使用Struts的Token机制解决表单的重复提交出处 Struts的Token(令牌)机制能够很好的解决表单重复提交的问题,基本原理是:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌

2、就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。这时其实也就是两点,第一:你需要在请求中有这个令牌值,请求中的令牌值如何保存,其实就和我们平时在页面中保存一些信息是一样的,通过隐藏字段来保存,保存的形式如:〈inputtype="hidden"name="org.apache.struts.taglib.html.TOKEN"value="6aa35341f25184fd996c4c918255c3ae"〉,这个value是TokenProcessor类中的generateToken()获得的,是根据当前用户的session

3、id和当前时间的long值来计算的。第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。下面就以在数据库中插入一条数据来说明如何防止重复提交。在Action中的add方法中,我们需要将Token值明确的要求保存在页面中,只需增加一条语句:saveToken(request);,如下所示:publicActionForwardadd(ActionMappingmapping,ActionForm

4、form,HttpServletRequestrequest,HttpServletResponseresponse)//前面的处理省略saveToken(request);returnmapping.findForward("add");}在Action的insert方法中,我们根据表单中的Token值与服务器端的Token值比较,如下所示:publicActionForwardinsert(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServl

5、etResponseresponse)if(isTokenValid(request,true)){//表单不是重复提交//这里是保存数据的代码}else{//表单重复提交saveToken(request);//其它的处理代码}}其实使用起来很简单,举个最简单、最需要使用这个的例子:一般控制重复提交主要是用在对数据库操作的控制上,比如插入、更新、删除等,由于更新、删除一般都是通过id来操作(例如:updateXXXById,removeXXXById),所以这类操作控制的意义不是很大(不排除个别现象),重复提交的控制也就主要是在插入

6、时的控制了。先说一下,我们目前所做项目的情况:目前的项目是用Struts+Spring+Ibatis,页面用jstl,Struts复杂View层,Spring在Service层提供事务控制,Ibatis是用来代替JDBC,所有页面的访问都不是直接访问jsp,而是访问Structs的Action,再由Action来Forward到一个Jsp,所有针对数据库的操作,比如取数据或修改数据,都是在Action里面完成,所有的Action一般都继承BaseDispatchAction,这个是自己建立的类,目的是为所有的Action做一些统一的控

7、制,在Struts层,对于一个功能,我们一般分为两个Action,一个Action里的功能是不需要调用Struts的验证功能的(常见的方法名称有add,edit,remove,view,list),另一个是需要调用Struts的验证功能的(常见的方法名称有insert,update)。就拿论坛发贴来说吧,论坛发贴首先需要跳转到一个页面,你可以填写帖子的主题和内容,填写完后,单击“提交”,贴子就发表了,所以这里经过两个步骤:1、转到一个新增的页面,在Action里我们一般称为add,例如:publicActionForwardadd(A

8、ctionMappingmapping,ActionFormform,            HttpServletRequestrequest,HttpServletResponseresponse)         

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。