软件环境:
enterprise10.7.1 ArcGIS Pro2.5.0 -beta.3
情况:
发布了一个矢量切片服务到portal,当前该矢量切片服务的共享选项是仅portal所有者可以查看,其它用户无法查看该服务。
如何使其它用户通过js加载这个矢量切片服务呢?可以通过token的方式调用这个加密服务。
效果:
具体代码:
注意:下述代码中的username和password请相应替换成portal的账户名和密码。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
<title>4加载非公开矢量切片服务</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link rel="stylesheet" href="https://js.arcgis.com/4.14/esri/themes/light/main.css" />
<script src="https://js.arcgis.com/4.14/"></script>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script>
require([
"esri/Map",
"esri/views/MapView",
"esri/layers/VectorTileLayer",
"esri/identity/IdentityManager"
], function (Map, MapView, VectorTileLayer, IdentityManager) {
var map = new Map();
var view = new MapView({
container: "viewDiv",
map: map
});
var username = "username";
var password = "password"
var portalUrl = "https://zjq2018.gis.com/portal/";
var tokenDeferred = $.ajax({
type: "POST",
url: portalUrl + "sharing/generateToken",
data: {
username: username,
password: password,
referer: location.hostname,
expiration: 60,
f: "json"
},
dataType: "json"
});
if (tokenDeferred) {
tokenDeferred.then(function (response) {
if (response.token) {
IdentityManager.registerToken({
server: "https://zjq2018.gis.com/portal/sharing/rest",
token: response.token
});
var tileLayer = new VectorTileLayer({
url:
"https://zjq2018.gis.com/server/rest/services/Hosted/vtpk/VectorTileServer"
});
map.add(tileLayer);
}
})
.fail(function (error) {
console.log("操作失败.err:" + error);
})
}
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
参考资料:
https://blog.csdn.net/weixin_44616652/article/details/103953596