前言
在server和portal进行联合托管后,我们可以通过portal来管理服务。我们在调用server服务的时候。每次都会出现portal登录页。如下:
参考博客
https://blog.csdn.net/qq_40376439/article/details/104232430
https://blog.csdn.net/qq_40376439/article/details/104227280
https://blog.csdn.net/qq_40376439/article/details/104232445
解决思路
- 通过ArcGIS Portal中 generateToken来获取token
- 通过token来请求服务
解决方法
首先我们需要通过portal提供的接口获取token:
https://webadaptorhost.domain.com/webadaptorname/sharing/rest/generateToken
方法一
根据获取到的token拼接到服务尾部,即可完成服务的访问
http://***/arcgis/rest/services/test/wd/MapServer?token={token}
实例代码
let gConfig = {
portal_arcgis_hosturl: "https://172.16.0.168/",
portal_username: "portalxxx",
portal_pwd: "xxx",
ip: "172.26.38.130"
}
require([
"esri/map",
"esri/layers/ArcGISDynamicMapServiceLayer"
], function (Map, ArcGISDynamicMapServiceLayer) {
const params = {
'username': gConfig.portal_username,
'password': gConfig.portal_pwd,
'referer': gConfig.ip,
'f': 'json'
};
$.ajax({
type: "POST",
url: gConfig.portal_arcgis_hosturl + 'portal/sharing/rest/generateToken',
data: params,
success: function ({token}) {
console.log(token)
let map = new Map("map");
let simpleLayer = new ArcGISDynamicMapServiceLayer("https://gtkhgh01.arcgisonline.cn/server/rest/services/sd_2019_xzq/MapServer?token="+token);
console.log("https://ghssyrz02.arcgisonline.cn/server/rest/services/sd_2019_xzq/MapServer?token=" + token)
map.addLayer(simpleLayer);
}
})
});
方法二
使用ArcGIS API for JavaScript的esri/IdentityManager
设置全局服务
let gConfig = {
portal_arcgis_hosturl: "https://172.16.0.168/",
portal_username: "portalxxx",
portal_pwd: "xxx",
ip: "172.26.38.130"
}
require([
"esri/map",
"esri/layers/ArcGISDynamicMapServiceLayer"
], function (Map, ArcGISDynamicMapServiceLayer) {
const params = {
'username': gConfig.portal_username,
'password': gConfig.portal_pwd,
'referer': gConfig.ip,
'f': 'json'
};
$.ajax({
type: "POST",
url: gConfig.portal_arcgis_hosturl + 'portal/sharing/rest/generateToken',
data: params,
success: function ({token}) {
console.log(token)
IdentityManager.registerToken({
server: "https://gtkhgh01.arcgisonline.cn/server/rest/services",
token: response.data.request_token
});
let map = new Map("map");
let simpleLayer = new ArcGISDynamicMapServiceLayer("https://gtkhgh01.arcgisonline.cn/server/rest/services/sd_2019_xzq/MapServer");
map.addLayer(simpleLayer);
}
})
});