实际案例:
公司开发了新的项目,采用Extjs6,需要和老系统的数据做同步,比如组织架构和人员同步(增、删、改、异动)等,因为两者框架不同,域名不同,数据库也不同,所以就存在了跨域问题,如何能实现案例中遇到的问题呢?
废话不多说,直接上代码:
1、我们要实现新系统同步老系统数据,所以ajax请求在新系统发起。以新增组织为例:
// 跨域新增/修改组织
Ext.data.JsonP.request({
url : directUrl
+ 'jsonpCrossdomain.do?method=setGroupForJsonP',
timeout : 300000,
// 参数
params : {
parentId : checkNode.get('id'),
orgId : orgId,
orgName : orgName,
orgLevelType : orgLevelType,
sortNum : sortNum,
isUpdate : isUpdate,
mark : 'computer',
loginFrom : 'wx',
sessionUid: sessionUid,
currentUserCipher: currentUserCipher
},
callbackKey : "callback",// callback参数
success : function(response) {
var result = response.msg;
if (result == 'Y') {
Ext.MessageBox.show({
title : '提示',
msg : '组织数据保存成功',
buttons : Ext.MessageBox.OK,
icon : Ext.MessageBox.INFO
});
me.up('window').hide();
} else {
Ext.Msg
.alert('提示',
"当前数据保存成功,但老系统数据出现同步错误,请联系管理员!");
}
},
failure : function(result) {
if (result == "error") {
Ext.MessageBox.show({
title : '错误提示',
msg : '远程服务器无法访问,请联系管理员!',
buttons : Ext.MessageBox.OK,
icon : Ext.MessageBox.ERROR
});
} else {
console.log(result)
}
}
});
2、在老系统中后台写入方法
/**
* @功能描述:jsonP新增组织
*/
@SuppressWarnings("unchecked")
public ActionForward setGroupForJsonP(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
Session session = null;
Transaction tx = null;
String parentId = (String) request.getParameter("parentId");
String isUpdate = (String) request.getParameter("isUpdate");
String orgId=(String) request.getParameter("orgId");
String orgName=(String) request.getParameter("orgName");
String sortNumStr=(String) request.getParameter("sortNum");
String orgLevelType=(String) request.getParameter("orgLevelType");
int sortNum=0;
if(StringUtils.isNotBlank(sortNumStr)){
sortNum=Integer.parseInt(sortNumStr);
}
if(StringUtils.isNotBlank(orgName)){
orgName = new String(orgName.getBytes("iso-8859-1"), "utf-8");
}
boolean jsonP = false;
String cb = request.getParameter("callback");
if (cb != null) {
jsonP = true;
response.setContentType("text/javascript;charset=utf-8");
} else {
response.setContentType("application/x-json;charset=utf-8");
}
//密文验证
String sessionUid = request.getParameter("sessionUid");
String currentUserCipher = request.getParameter("currentUserCipher");
if(!(StringUtils.isNotBlank(currentUserCipher)
&& StringUtils.isNotBlank(sessionUid)
&& sessionUid.equals(AESTools.decrypt(currentUserCipher)))){
String str = "{success:true, msg:'非法访问'}";
if (jsonP) {
response.getWriter().write(cb + "("+str+");");
}else{
response.getWriter().write(str);
}
return null;
}
try {
session = HibernateClass.getSession();
tx = session.beginTransaction();
String str = "{success:true, msg:'Y'}";
List listExisted = session.createQuery("from Systemgroups sg where sg.orgCode = :orgCode")
.setParameter("orgCode", orgId).list();
if ((listExisted.size() > 0) && (isUpdate.equals("false"))) { //有重复orgId
str = "{success:true, msg:'N'}";
} else {
String longNum = "XXX"; //找到父结点的长代码
List list = session.createQuery("from Systemgroups sg where sg.orgId = :parentid")
.setParameter("parentid", parentId).list();
for (Iterator iter = list.iterator(); iter.hasNext();) {
Systemgroups sg = (Systemgroups) iter.next();
longNum = sg.getLongNumber();
}
if (isUpdate.equals("false")) { //新增组织
Systemgroups sg = new Systemgroups();
sg.setOrgId(orgId);
sg.setOrgCode(orgId);
sg.setOrgName(orgName);
sg.setParentId(parentId);
sg.setIsProjectParent("4".equals(orgLevelType)?true:false);
sg.setIsdeleted("N");
sg.setSortNum(sortNum);
sg.setProjectContractName("");
sg.setLongNumber(longNum + "!" + orgId);
session.save(sg);
} else {//修改组织
Systemgroups sg=(Systemgroups) session.get(Systemgroups.class, orgId);
sg.setOrgName(orgName);
sg.setSortNum(sortNum);
sg.setIsProjectParent("4".equals(orgLevelType)?true:false);
session.update(sg);
}
}
if (jsonP) {
response.getWriter().write(cb + "("+str+");");
}else{
response.getWriter().write(str);
}
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
String str = "{success:true,msg:'更新错误,请检查网络连接是否正常!'}";
if (jsonP) {
response.getWriter().write(cb + "("+str+");");
}else{
response.getWriter().write(str);
}
} finally {
HibernateClass.closeSession(session);
}
return null;
}