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

ArcGIS操作与开发 同时被 2 个专栏收录
39 篇文章 3 订阅
62 篇文章 35 订阅

       之前从事过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");//设置地图服务器已允许跨域

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

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

  • 1
    点赞
  • 1
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 点我我会动 设计师:白松林 返回首页

打赏

GIS开发者

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值