chenyan1397

struts2 Token控制重复提交

1. 首先在提交的form表单加入<s:token></s:token>

2.修改struts.xml

   <action name="user" class="com.awf.action.UserAction">
   <result>/addOK.jsp</result>


   <interceptor-ref name="defaultStack"></interceptor-ref>
   <interceptor-ref name="token"></interceptor-ref>
   <result name="invalid.token">/error.jsp</result>


  </action>

 

在form表单生成一个在存在session的一串字符,当提交时struts2会比较他们的值,如果相同说明没有重复提交,然后在清空session里这个值,若用户再次重复提交struts2会发现session里没有这个值,这是会转到 <result name="invalid.token">/error.jsp</result>页面

 

3.它的实现原理和struts1.2一样,只是这里用的是配置,以前struts1.2是这样做的:

  在转向数据填写页面是的action中,this.saveToken(request);

 在处理提交数据的action中,

 if (this.isTokenValid(request)) {
   this.resetToken(request);//重置

//处理业务代码......
     } else {
   this.saveToken(request);

 System.out.println("不能重复提交.....");
     }

 

 

4.虽然用token方法可以控制提交,但是如果用户是恶意提交的,他完全可以在数据填写页面开始重复,这样就就可以产生不同的令牌值了,所以比较安全的方法还是用重定向.

评论