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方法可以控制提交,但是如果用户是恶意提交的,他完全可以在数据填写页面开始重复,这样就就可以产生不同的令牌值了,所以比较安全的方法还是用重定向.
评论