页面防止重复提交,在服务端使用struts令牌机制,前台分为jsp和extJs(其他js框架同理)
2015-08-31 11:43
721 查看
1.strust1+ jsp ,在后台调转到添加界面的方法中设置super.saveToken(request);调转到添加界面后,填写表单信息,保存后,在保存方法中
if (!super.isTokenValid(request, true))
{
MessagePojo msg = new MessagePojo("请不要重复提交相同的信息,本操作可能由刷新界面导致!", "bidInfo.do?method=bidinfoitems");
request.setAttribute("message", msg);
return mapping.findForward("message");
}
2.strtus2 + jsp,在添加界面增加strtus2标签<s:token/>,然后在保存的方法中对比令牌值。
3.struts2 + extJs .一般extJs调转到增加界面是不需要通过后台的,所以在后台增加一个方法:
/**
* 设置令牌
* @return
* @throws Exception
*/
public String setRequestToken() throws Exception
{
String strGUID = RandomGUIDUtil.newGuid();//生成令牌
session.put("request_token", strGUID);
response.getWriter().write(strGUID);
return null;
}
在前台弹出窗口或者frompanlan中添加方法,
Ext.Ajax.request(
{
url : basePath + "material/WzPmRkMaster!setRequestToken.action",
success : function(resp, conf)
{
var token = resp.responseText;
Ext.getCmp('_token').setValue(token);
},
method : 'post'
});
那么初始化的 令牌都生成了,
然后保存时候,判断令牌值是否一样:
String strGUID = RandomGUIDUtil.newGuid(); //生成令牌
String strRequestToken = (String)session.get("request_token"); //取出会话中的令牌
String strToken = request.getParameter("token"); //页面中的令牌
if(strRequestToken != null && strToken !=null && !strRequestToken.equals(strToken)){ //重复提交,重置令牌
session.put("request_token", strGUID);
response.getWriter().write("{success:true,token:'"+strGUID+"',message:'重复提交!'}");
return null;
}
session.put("request_token", "");//如果通过则清空request_token值,如果重复保存,那么request_token为空,而token值还是之前初始化的那个,这样就会导致令牌值不一样,就会提示重复提交了。
测试:在前台保存的时候设置延迟5秒:
setTimeout( function(){
addForm.getForm().doAction('submit',
{
url : url,
waitTitle : '请稍后',
waitMsg : '正在保存数据...',
params :
{
token : Ext.getCmp('_token').getValue()
},
success : function(form, action)
{
Ext.MessageBox.show(
{
title : "提示信息",
msg : "<nobr>" + action.result.message + "</nobr>",
icon : Ext.MessageBox.INFO,
buttons : Ext.MessageBox.OK,
fn : function()
{
Ext.getCmp("currGrid").getStore().reload();
addWin.close();
}
});
Ext.getBody().unmask();
}
});
}, 5 * 1000 );//延迟5000毫米
前台就会提示重复提交!
if (!super.isTokenValid(request, true))
{
MessagePojo msg = new MessagePojo("请不要重复提交相同的信息,本操作可能由刷新界面导致!", "bidInfo.do?method=bidinfoitems");
request.setAttribute("message", msg);
return mapping.findForward("message");
}
2.strtus2 + jsp,在添加界面增加strtus2标签<s:token/>,然后在保存的方法中对比令牌值。
3.struts2 + extJs .一般extJs调转到增加界面是不需要通过后台的,所以在后台增加一个方法:
/**
* 设置令牌
* @return
* @throws Exception
*/
public String setRequestToken() throws Exception
{
String strGUID = RandomGUIDUtil.newGuid();//生成令牌
session.put("request_token", strGUID);
response.getWriter().write(strGUID);
return null;
}
在前台弹出窗口或者frompanlan中添加方法,
Ext.Ajax.request(
{
url : basePath + "material/WzPmRkMaster!setRequestToken.action",
success : function(resp, conf)
{
var token = resp.responseText;
Ext.getCmp('_token').setValue(token);
},
method : 'post'
});
那么初始化的 令牌都生成了,
然后保存时候,判断令牌值是否一样:
String strGUID = RandomGUIDUtil.newGuid(); //生成令牌
String strRequestToken = (String)session.get("request_token"); //取出会话中的令牌
String strToken = request.getParameter("token"); //页面中的令牌
if(strRequestToken != null && strToken !=null && !strRequestToken.equals(strToken)){ //重复提交,重置令牌
session.put("request_token", strGUID);
response.getWriter().write("{success:true,token:'"+strGUID+"',message:'重复提交!'}");
return null;
}
session.put("request_token", "");//如果通过则清空request_token值,如果重复保存,那么request_token为空,而token值还是之前初始化的那个,这样就会导致令牌值不一样,就会提示重复提交了。
测试:在前台保存的时候设置延迟5秒:
setTimeout( function(){
addForm.getForm().doAction('submit',
{
url : url,
waitTitle : '请稍后',
waitMsg : '正在保存数据...',
params :
{
token : Ext.getCmp('_token').getValue()
},
success : function(form, action)
{
Ext.MessageBox.show(
{
title : "提示信息",
msg : "<nobr>" + action.result.message + "</nobr>",
icon : Ext.MessageBox.INFO,
buttons : Ext.MessageBox.OK,
fn : function()
{
Ext.getCmp("currGrid").getStore().reload();
addWin.close();
}
});
Ext.getBody().unmask();
}
});
}, 5 * 1000 );//延迟5000毫米
前台就会提示重复提交!
相关文章推荐
- 深入理解Java的接口和抽象类
- The type javax.servlet.ServletContext cannot be resolved.
- JavaSE复习日记 : 继承关系和super关键字以及继承关系中方法的覆写
- java基础学习第一章练习4-幸运抽奖
- Java基础学习第一章练习三
- java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException
- java dom4j解析xml
- struts2中关于jsp页面向action传值出现乱码问题
- spring security组成
- Java基础学习第一章练习T2
- Java星打印代码
- 【spring框架】(一)spring简介
- Java基础学习第一章练习T1
- Java 数组合并问题
- "could not create the java virtual machine"启动eclipse报错 --
- java将excel2003转string
- java中将word转String
- JAVA3D教程
- java中将file文件对象转string
- Java数组学习练习3冒泡排序数组代码