防止表单重复提交:Java防止非法和重复表单提交的方法

第一,对于不支持POST的,可以简单的使用如下代码
if(\"POST\".equals(request.getMethod()))...{
//正常进行
}else...{
//异常请求
out.print(\"异常访问\");
return;
}
如果是servlet,可以将doGet方法直接返回,不进行处理就行了
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)...{
return;
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)...{
//正常进行操作
}
还可以采用特定的标志来区分,比如
<form><inputtype=\"hidden\"name=\"action\"value=\"insert\"/></form>
程序里这样判断
if(\"POST\".equals(request.getMethod())&&(\"insert\".equals(request.getParameter(\"action\"))))...{
//正常进行
}else...{
//异常请求
out.print(\"异常访问\");
return;
}
第二,判断提交的来源referer,代码如下
if(\"POST\".equals(request.getMethod()))...{
Stringreferer=request.getHeader(\"referer\");
if(referer==null||!referer.startsWith(\"http://\"+request.getServerName()))...{
//非法来源
return;
}
//正常进行
}else...{
//异常请求
out.print(\"异常访问\");
return;
}
第三防止重复提交的hashCode
在表单显示页面
//生成一个formhash,算法可以自己定,不随便重复就可以了
Stringformhash=MD5.encode(Long.toString(newDate().getTime()));
//读取当前session里面的hashCode集合,此处使用了Set,方便判断。
Set<String>formhashSession=(Set<String>)session.getAttribute(\"formhashSession\");
if(formhashSession==null)...{
formhashSession=newHashSet<String>();
}
//检测重复问题
while(formhashSession.contains(formhash))...{
formhash=MD5.encode(Long.toString(newDate().getTime()));
}
//保存到session里面
formhashSession.add(formhash);
//保存
session.setAttribute(\"formhashSession\",formhashSession);
表单里面增加如下字段
<inputtype=\"hidden\"name=\"formhash\"id=\"formhash\"value=\"<%=formhash%>\"/> [Page]
在表单提交页面进行如下处理
//拿到表单的formhash
Stringformhash=upload.getParameter(\"formhash\");
//拿到session里面的集合
Set<String>formhashSession=(Set<String>)session.getAttribute(\"formhashSession\");
//如果没有,则是重复提交,或者非法提交
if(formhashSession==null||!formhashSession.contains(formhash))...{
out.println(\"请不要重复提交!\");
return;
}
//下面进行其它的操作
//
//最后,如果操作成功,从session里面把这个formhash删掉!
//以免用户少填写了某个字段,造成表单无法再次提交
formhashSession.remove(formhash);
session.setAttribute(\"formhashSession\",formhashSession);
Tags:  如何防止重复提交 防止重复提交 表单重复提交 防止表单重复提交

延伸阅读

最新评论

发表评论