加载有权限控制的ArcGISServer服务
加载有权限控制的ArcGISServer服务
ArcGIS Server服务权限控制
- 在服务管理页面(http://{host}:{port}/arcgis/manager/security.html)配置好用户与角色
- 在服务列表页面(http://{host}:{port}/arcgis/manager/)对相应服务进行权限控制
通过token生成接口获取token
接口地址:http://%s/arcgis/tokens?request=getToken&username=%s&password=%s&expiration=30
编写代码请求接口
- java代码
public class AgsToken extends HttpServlet {
private String host,username,pwd;
@Override
public void init() throws ServletException {
host = this.getInitParameter("host");
username = this.getInitParameter("username");
pwd = this.getInitParameter("pwd");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String token = getArcGISToken(host,username,pwd);
OutputStream out = resp.getOutputStream();
out.write(token.getBytes());
out.flush();
out.close();
}
private String getArcGISToken(String host, String userName, String pwd){
String tokenService = String.format("http://%s/arcgis/tokens?request=getToken&username=%s&password=%s&expiration=30", host, userName, pwd);
String token = "";
HttpURLConnection connection = null;
InputStream is = null;
BufferedReader br = null;
try {
URL url = new URL(tokenService);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(15000);
connection.setReadTimeout(60000);
connection.connect();
if (connection.getResponseCode() == 200) {
is = connection.getInputStream();
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
StringBuffer sbf = new StringBuffer();
String temp = null;
while ((temp = br.readLine()) != null) {
sbf.append(temp);
// sbf.append("\r\n");
}
token = sbf.toString();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}finally {
// 关闭资源
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != is) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
connection.disconnect();
}
return token;
}
}
- web.xml配置
<servlet>
<servlet-name>agstoken</servlet-name>
<servlet-class>com.abc.AgsToken</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>a</param-value>
</init-param>
<init-param>
<param-name>pwd</param-name>
<param-value>1</param-value>
</init-param>
<init-param>
<param-name>host</param-name>
<param-value>192.98.8.153:6080</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>agstoken</servlet-name>
<url-pattern>/token</url-pattern>
</servlet-mapping>
- 前端openlayers请求服务
$.get("/web/token",function (re) {
var agslayer = layer.getAGSRestLayer("http://192.98.8.153:6080/arcgis/rest/services/test/tta/MapServer",re);
map.addLayer(agslayer);
});
var getAGSRestLayer = function (url,token) {
var source = null;
if(token){
source = new ol.source.TileArcGISRest({
// projection:'EPSG:3785',
url:url,
params: { //带权限的arcgis服务
token: token
}
});
}else{
source = new ol.source.TileArcGISRest({
url:url
});
}
var lyr = new ol.layer.Tile({
source:source
});
return lyr;
};