由于项目需求,发布了可编辑的要素服务,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的,可以去百度(靠抓包行不通,密码做了加密等等,所以用代理)