使用Struts的Token机制解决表单的重复提交
来源:互联网 发布:2017软件开发薪资 编辑:程序博客网 时间:2024/05/17 05:18
使用Struts的Token机制解决表单的重复提交
前几天被这个问题困扰了,在Google中搜“表单重复提交”,也搜到不少资料,但有的讲的不是很清楚,所以走了些弯路,现在写下来,不能算原创吧。
Struts的Token(令牌)机制能够很好的解决表单重复提交的问题,基本原理是:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。
这时其实也就是两点,第一:你需要在请求中有这个令牌值,请求中的令牌值如何保存,其实就和我们平时在页面中保存一些信息是一样的,通过隐藏字段来保存,保存的形式如: 〈input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="6aa35341f25184fd996c4c918255c3ae"〉,这个value是TokenProcessor类中的generateToken()获得的,是根据当前用户的session id和当前时间的long值来计算的。第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。下面就以在数据库中插入一条数据来说明如何防止重复提交。
在Action中的add方法中,我们需要将Token值明确的要求保存在页面中,只需增加一条语句:saveToken(request);,如下所示:
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
//前面的处理省略
saveToken(request);
return mapping.findForward("add");
}在Action的insert方法中,我们根据表单中的Token值与服务器端的Token值比较,如下所示:
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
if (isTokenValid(request, true)) {
// 表单不是重复提交
//这里是保存数据的代码
} else {
//表单重复提交
saveToken(request);
//其它的处理代码
}
}
- 使用Struts的Token机制解决表单的重复提交
- 使用Struts的Token机制解决表单的重复提交
- 使用Struts的Token机制解决表单的重复提交
- 使用Struts的Token机制解决表单的重复提交
- 使用Struts的Token机制解决表单的重复提交
- 使用Struts的Token机制解决表单的重复提交
- 使用Struts的Token机制解决表单的重复提交
- 使用Struts的Token机制解决表单的重复提交
- 使用Struts的Token机制解决表单的重复提交
- 使用Struts的Token机制解决表单的重复提交
- 用Struts的Token机制解决表单重复提交
- 用Struts的Token机制解决表单重复提交
- 用Struts的Token机制解决表单重复提交
- 用Struts的Token机制解决表单重复提交
- 使用Struts的Token机制解决表单的重复提交(转ewolf的工作专栏)
- Struts -- Token机制(解决表单重复提交)
- Struts的Token(令牌)机制解决表单重复提交的问题
- Struts的Token(令牌)机制解决表单重复提交的问题
- 添加用户信息注释
- Google Tips
- 关于跳槽的切身体会(转)
- 然然明天暂时离开网络了 我的网络也告一段落了
- 我终于理解了JSP 的分页了
- 使用Struts的Token机制解决表单的重复提交
- 软件开发公司管理手册 (上)
- 用拖把扫去疲惫;)
- 编写测试用例的前前后后
- how to write it in C++?
- Struts中不同的Action和ActionForm组合
- 基于struts+spring+ibatis的轻量级J2EE开发
- test
- [转]c/c++常用网址