由于项目需求,发布了可编辑的要素服务,android这边能编辑,但是别人通过浏览器可以打开,可以编辑,修改,删除要素,为了安全起见,考虑有没有什么方法可以通过用户验证再获取arcgis资源,去百度看了一些文章,流程来了,arcgis后台可以设置用户访问目录权限,arcgis有一个专门生成token的控制器,用来对web进行安全验证,大致界面是这样的:
username就是登录后台的用户名,或者新建的用户名(注意:这里最好用最大权限的用户名,到时候会出很多奇葩的问题,注意坑) ;
password登录密码;
client,这个是用来判断设备的,因为是android,传一个header过去就行了,就选择referer;(这个位置坑了我2小时,一直没明白过来,最后一想,一看,就是一个http协议头);
下面一个填你觉得是唯一代表你的android设备就行;
最下边的一个是时间崔,多久过期,设置525600一年(随意);
此时点生成,会生成一串token的,以后就用这个token进行权限验证并获取资源;
android端请求注意两点:
1。协议头 referer,如 获取json:
Map<String, String> map = new HashMap<>();
map.put("f", "pjson");
map.put("token",gisToken);
mMainViewViewModel.getRestGis(map, mGisBeanObserver);
协议头:
@Headers("Referer: org.fdcch.dmpctool")
@GET(BuildConfig.RESTJSON)
Observable<RestGisBean> getRestGis(@QueryMap Map<String,String> map);
2.arcgis自封装的 token验证工具类,如 要素服务加载
//生成token验证对象
UserCredential ucd = UserCredential.createFromToken(gisToken, "org.fdcch.dmpctool");
mServiceFeatureTable = new ServiceFeatureTable(BuildConfig.BASEGIS + BuildConfig.RESTJSON + "/" + id.get(a).getId());
//设置token
mServiceFeatureTable.setCredential(ucd);
大致就是这么个逻辑,中间细节,什么服务器代理生成token的,可以去百度(靠抓包行不通,密码做了加密等等,所以用代理)