背景:
最近在做一个运维平台,要从该平台直接可以联入zabbix平台的“事件详情”页面。
考虑过的方法:
1.单点登陆:在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。(比较复杂工作量也比较大直接否定)。
2.分析zabbix请求时携带的cookie数据,在后台通过zabbixAPI接口获取session_id写入zabbix系统域下的cookie中。
由于跨域写cookie也是比较麻烦,也否定了。
3.在本系统中模拟zabbix登陆,建立zabbix会话。在以后的请求到zabbix页面时可以直接使用该会话进行请求。
要在本系统页面通过ajax登陆zabbix系统,就要解决跨区post提交。
请求路径:http://11.202.16.28/zabbix/index.php?name=admin&password=admin123&autologin=1&enter=Sign+in
在zabbix的index.php中增加
header("Access-Control-Allow-Origin: *");//允许所有地址跨域请求
在本系统首页执行
//同时进行zabbix登陆,建立会话
function loginZabbix(){
$.ajax({
url:"${zabbixLoginUrl}",
type:'post',
// 下面的两行代码,就是解决跨域的关键
xhrFields: {withCredentials: true},
crossDomain: true,
//就是上面的两行代码
dataType: 'jsonp',
success:function(data){
}
});
}
经过测试可以满足要求。