struts2的token实现.doc_第1页
struts2的token实现.doc_第2页
struts2的token实现.doc_第3页
struts2的token实现.doc_第4页
struts2的token实现.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Struts2中使用token避免重复提交的方法作者: 佚名, 出处:IT专家网,责任编辑: 谢妍妍, 2009-09-22 13:00本文Struts2中使用token避免重复提交的方法1.在struts.xml中 /pages/register.jsp /pages/success.jsp /pages/error.jsp /pages/register.jsp wait.jsp input 2.在页面中加 3. token: 在活动中检查合法令牌(token), 防止表单的重复提交; 在会产生提示信息token-session: 同上, 但是在接到非法令牌时将提交的数据保存在session中; 不会在会产生提示信息只会在后台发出警告并处理,如下:警告: Form token KO80SIJW4F84034NG5HM1ZBUGOVNY64D does not match the session token null. 编辑推荐: 1. Struts2拦截器execAndWait简介 2. Struts2教程:第一个Struts2程序 3. Struts2对WebWork的改进struts2使用拦截器来检查表单是否重复提交,它采用同步令牌的方式来实现对表单重复提交的判断。首先需要在表单中使用标签创建一个新的令牌值,并用你所指定的令牌名把令牌保存到session中。而这个令牌值是随即产生的经过加密的字符序列,不会重复。其次需要为action配置TokenInterceptor或者TokenSessionStoreInterceptor拦截器。这两个拦截器都已经在struts-default.xml中定义,但没有包含在defaultStack拦截器栈中。在action中配置拦截器和在重复提交时,将要请求导向的结果视图。 /WEB-INF/pages/register.jsp /WEB-INF/pages/register.jsp /WEB-INF/pages/success.jsp /WEB-INF/pages/error.jsp default default 注:excludeMethods指定要排除的方法。在register.jsp页面中添加action级别的错误信息显示的标签:在form中添加标签:最好为在资源文件中设置键struts.messages.invalid.token的本地化消息。struts.messages.invalid.token=您已经提交了表单,请不要重复提交。TokenSessionStoreInterceptor:使用TokenSessionStoreInterceptor拦截器同样能避免重复提交,TokenSessionStoreInterceptor集成自TokenInterceptor。使用TokenSessionStoreInterceptor将不会输出任何错误信息。如果token无效,请求被导向到invalid.token结果码映射的视图。配置如下: default 看了网上说的有关struts2不重复刷新有很多,基本上都是在同一个页面中可以,那么我说下在一个页面中有一个按钮当点击后,到另一个页面。这个页面有许多列表记录,点击保存后再一次跳转到上一次页面中。那么在当前页面点击右键刷新,问题就在这了。 以前的 html: struts.xml: /topic/manage_topic.jsp /common/noBack.jsp addTopicElement default 注意: 【1】: 标签创建一个新的令牌值,并用你所指定的令牌名把令牌保存到session中。而这个令牌值是随即产生的经过加密的字符序列,不会重复。 其次需要为action配置TokenInterceptor或者TokenSessionStoreInterceptor拦截器。这两个拦截器都已经在struts-default.xml中定义,但没有包含在defaultStack拦截器栈中。 【2】: interceptor-ref name=token/和interceptor-ref name=defaultStack/是两个拦截器的配置,目的是为了接收页面传入 的token令牌及参数,result name=invalid.token/common/noBack.jsp/result指当发现重复提交时,需要流转到的页面. 【3】: excludeMethods指定要排除的方法,includeMehtods是要拦截的方法。 如果是用javascript来提交的话,看下边- function selectA() var url = relation_addRelationshipTopic.do?relation.rnId=&relation.selectRn=+selectRn+&fresh= + Math.random()+; var token = =relation.token; var token2 = relation.token=; token2 += document.getElementsByName(relation.token)0.value; url += & + token + &; url += token2; location = url; 注: 它回自动的生成两个hidden,一个是,一个是reletion.token.struts2 标签关键字: 防止表单重复提交 1、使用Struts2的表单标签,其中需要增加token标签。如下: Java代码 2、在struts配置文件中增加token拦截器。如下: Java代码 /page1.jsp /page1error.jsp /page1.jsp /page1error.jsp 注意,需要name为invaid.token的result。这是当拦截器判断是重复提交的时候,会转向的结果。 3、invaid.token页面打印错误信息,一样可以使用struts标签。如下: 理解: 1、JSP使用标签的时候,Struts2会建立一个GUID(全局唯一的字符串)放在session中,并且会成为一个hidden放在form中。 2、token拦截器会判断客户端form提交的token和session中保存的session是否equals。如果equals则执行Action。否则拦截器直接返回invaid.token结果,Action对应的方法也不会执行 - 对于采用token防止表单重复提交的原理我就不用多说了,大家也应该都知道,在这我只介绍在struts2中如何利用标签实现防止表单的重复提交。 首先在表单中加入标签 ,会生成一个隐藏域用于存储系统自动随机生成的token值。然后在action中启用TokenInterceptor,即在struts.xml中加入下面类似代码。 Java代码 1. 2. register_success.jsp 3. register.jsp 4. register.jsp 5. 6. 7. register_success.jsp register.jsp register.jsp 其中register.jsp”是在发生表单重复提交时,返回给用户提示信息的显示页面,同时还需在显示页面中加入 ;“”是启用TokenInterceptor 如果表单重复提交,会提示The form has already been processed or no token was supplied, please try again。修改国际化文件struts.messages.invalid.token 的键值,提供自己定制的错误信息。比如:struts.messages.invalid.token= 您已经提交了表单,请不要重复提交。 在用struts2.0标签开发中,经常要使用form提交.通常:1)写一个action类此action类完成提交后的保存动作.2)写一个静态jsp页面写form,以及输入input,和提交button.3)设置struts*.xml文件配置action名称以及映射的类和返回结果名称等.问题:在点击提交后,我们通常会弹出一个提示信息的页面,用户此时有可能会按f5刷新当前提交的action,从而将多个相同的数据保存到了后台数据库,并且造成了潜在的安全危险!如何避免重复提交呢?1) 用!如在输入界面的jsp里,设置token标志:. . 2) 在struts*.xml文件里配置拦截器: /Info/NoBack.jsp 3)写一个名称为NoBack.jsp的提示文件,当重复f5刷新时,将显示本页内容,提示不可重复提交,或者页面已经过期在最终生成页面时,自动生成一个unique id,通过它拦截器才能知道页面是否是同一次提交.注意自定义的表单域别重名了。它的作用是防止表单重复提交,每次加载页面 struts.token 的值都不一样,如果两次提交时该值一样,则认为是重复提交。此时要启用 TokenInterceptor(token) 拦截器,最好是也启用 TokenSessionStoreInterceptor(token-session) 拦截器,不然后台会出现错误提示:2008-5-17 22:39:21 erceptor.ParametersInterceptor setParameters严重: ParametersInterceptor - setParameters: Unexpected Exception catched: Error setting expression struts.token with value Ljava.lang.String;1c2e1632008-5-17 22:39:21 erceptor.ParametersInterceptor setParameters严重: ParametersInterceptor - setParameters: Unexpected Exception catched: Error setting expression with value Ljava.lang.String;abaf8c但不影响使用。不过如果只有 token-session 拦截器却是不行的。token 和 token-session 拦截器的启用,是在 struts.xml 配置文件中,既可以为包启用,也可以单独为某个 action 启用:1) 为包启用 token 和 token-session1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. /login.jsp 12. /exception.jsp 13. 14. . /login.jsp /exception.jsp . 2) 为 Action 启用 token 和 token-session1. 2. 3. 4. 5. /login.jsp 6. /exception.jsp 7. /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论