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的服务。

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

从477行开始插入

<filter>
      <filter-name>CorsFilter</filter-name>
      <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
      <init-param>
        <param-name>cors.allowed.origins</param-name>
        <param-value>*</param-value>
      </init-param>
      <init-param>
        <param-name>cors.allowed.methods</param-name>
        <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
      </init-param>
      <init-param>
        <param-name>cors.allowed.headers</param-name>
        <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
      </init-param>
      <init-param>
        <param-name>cors.exposed.headers</param-name>
        <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
      </init-param>
      <init-param>
        <param-name>cors.support.credentials</param-name>
        <param-value>true</param-value>
      </init-param>
      <init-param>
        <param-name>cors.preflight.maxage</param-name>
        <param-value>10</param-value>
      </init-param>
    </filter>
    <filter-mapping>
      <filter-name>CorsFilter</filter-name>
      <url-pattern>/*</url-pattern>
</filter-mapping>

保存,启动系统服务中停掉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");//设置地图服务器已允许跨域

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

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

猜你喜欢

转载自blog.csdn.net/GISuuser/article/details/81098675