我从网上找了好久这类代码,全都是在新页面提交才能实现Token问题,可我的项目是本页提交
具体图片请看我的像册kong_d_f1104.photo.163.com
里面有一张我项目的截图
这个问题已经困扰我好几天了,谁能把jsp,action,xml的代码全都帮我贴出来啊?先谢谢了
具体图片请看我的像册kong_d_f1104.photo.163.com
里面有一张我项目的截图
这个问题已经困扰我好几天了,谁能把jsp,action,xml的代码全都帮我贴出来啊?先谢谢了
在servlet里面往session和request里面设置token,提交的页面里面有个叫token的隐藏域,用request里的token值对其进行附值,然后下次提交的时候,在servlet里面比较session和request里的token值是不是一样的。我感觉这样的话,对于是提交到本页还是提交到新页面没什么区别吧
你说的方式我也试过,可能小弟道行太浅,没有成功,第一次提交就走失败的分支
this.saveToken(request);
在保存的action里写
if (this.isTokenValid(request)) {
"重复提交";
}
else {"业务处理"
}你试一下吧
|| useraccounthbg == ""
|| useraccounthbg.equals("")) {
//没有登陆或session已经失效
return mapping.findForward("nosession"); } else { //写入数据库
visitingBO.addVisiting(visiting, useraccounthbg, useridhbg);
ifsuccess = true;
} } catch (Throwable e) {
System.out.println(e.getMessage());
ActionError error = new ActionError(e.getMessage());
errors.add(ActionErrors.GLOBAL_ERROR, error);
ifsuccess = false;
} } else { //表单重复提交,产生新令牌
saveToken(request); ActionError error = new ActionError("error.add.again");
errors.add(ActionErrors.GLOBAL_ERROR, error); } //处理后,重新浏览页面 try { if (ifsuccess == true) { //添加成功,初始化各个框
visiting.setContent(""); ActionError error = new ActionError("error.addvisiting.success");
errors.add(ActionErrors.GLOBAL_ERROR, error); } //刷新添加后的页面 Collection VisitingList = visitingBO.ListVisiting(useraccounthbg,prisonid); request.setAttribute("name", name);
request.setAttribute("user_id", user_id);
request.setAttribute("prisonid", prisonid); request.setAttribute("visitingList", VisitingList); //提交成功,产生新令牌
saveToken(request); } catch (Throwable e) {
System.out.println(e.getMessage());
ActionError error = new ActionError(e.getMessage());
errors.add(ActionErrors.GLOBAL_ERROR, error);
} saveErrors(request, errors);
return mapping.findForward("addsuccess");
var vForm = document.forms[0];
vForm.up.disabled = true;...
...其实重复有可能是这个问题 就是你把一个图片加了<a>连接 又加了 onclick 造成多次提交正常的话一个触发是不会多次提交的。