Arcgis 100.4 for android token验证

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