防止刷新/后退引起的重复提交问题的Java Token代码,非Struts
Posted zings
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防止刷新/后退引起的重复提交问题的Java Token代码,非Struts相关的知识,希望对你有一定的参考价值。
贴子转自http://hi.baidu.com/bobylou,转之前并没有验证文章里的方法是不是有效,估计原作者把它放到blog之前应该做过测试了吧。
Struts本身有一套完善的防止重复提交表单的Token(令牌)机制,但笔者目前的项目自写的framework没有用到Struts,故也得自写防止用户因为后退或者刷新来重复提交表单内容的Token机制。不难,容易实现。
实现原理:一致性。jsp生成表单时,在表单中插入一个隐藏<input>字段,该字段就是保存在页面端的token字符串,同时把该字符串存入session中。等到用户提交表单时,会一并提交该隐藏的token字符串。在服务器端,查看下是否在session中含有与该token字符串相等的字符串。如果有,那么表明是第一次提交该表单,然后删除存放于session端的token字符串,再做正常业务逻辑流程;如果没有,那么表示该表单被重复提交,做非正常流程处理,可以警告提示也可以什么也不做。
看代码。
首先是Token主类。类很简单,而且主要方法都给doc注释了
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
怎么使用?
在jsp页面端。
首先import该类:
<%@ page import="com.paizuo.framework.util.Token" %>
表单包含隐藏的token字符串:
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![技术分享](http://www.blogjava.net/Images/dot.gif)
![技术分享](http://www.blogjava.net/Images/dot.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![技术分享](http://www.blogjava.net/Images/dot.gif)
![技术分享](http://www.blogjava.net/Images/dot.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
在Server端action中进行检验。
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![技术分享](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
完毕。
以上是关于防止刷新/后退引起的重复提交问题的Java Token代码,非Struts的主要内容,如果未能解决你的问题,请参考以下文章