ArcGIS API for JS 4.7开发过程中的跨域问题与解决

       之前从事过ArcGIS API for JS 3.x的开发和OpenLayer的开发工作,最近从事ArcGIS JS开发,直接从4.7入手,感觉坑太多,动不动都需要跨域,API本地部署还会提示跨域,ArcGIS Server 的地图服务接入也跨域,而且我的ArcGIS Server还是本机安装的。之前使用GeoServer+Openlayers的时候也从没有遇到这些啊。言归正传,跨域主要从两方面入手

ArcGIS Server设置允许跨域

先在系统服务中停掉ArcGIS Server的服务。

打开 \framework\runtime\tomcat\conf\web.xml,这部分类似于Tomcat的跨域。

从477行开始插入


      CorsFilter
      org.apache.catalina.filters.CorsFilter
      
        cors.allowed.origins
        *
      
      
        cors.allowed.methods
        GET,POST,HEAD,OPTIONS,PUT
      
      
        cors.allowed.headers
        Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers
      
      
        cors.exposed.headers
        Access-Control-Allow-Origin,Access-Control-Allow-Credentials
      
      
        cors.support.credentials
        true
      
      
        cors.preflight.maxage
        10
      
    
    
      CorsFilter
      /*

保存,启动系统服务中停掉ArcGIS Server的服务,进去ArcGIS Server查询地图服务是否已启动,已启动后,才能跨域访问,这个过程有点慢。

前端代码将ArcGIS Server所在服务器IP加入已跨域服务器列表

前面的完成了,没有这意一步还是不行,会提示“ERR_CERT_AUTHORITY_INVALID”错误。真想不明白,为什么已经跨域了,还要在前端告诉API我已经跨域了。

一定要在添加地图服务前,加入如下代码:

 require(["esri/Map",
        "esri/config",
        "esri/views/MapView",
        "esri/layers/MapImageLayer",
        "dojo/domReady"
    ], function (Map,
                 esriConfig,
                 MapView,
                 MapImageLayer,
) {
        esriConfig.request.corsEnabledServers.push("localhost:6443");//设置地图服务器已允许跨域

重要的是上面代码的最后一句。

这样就可以正常访问地图服务了,跨域也终于结束了。

你可能感兴趣的:(ArcGIS操作与开发,WebGIS开发)