1. 环境:
- ArcGIS Server 10.2
- MapBox-GL v 1.7
2. 问题描述:
在使用ArcGIS 发布一个WMS 服务,同时用OpenLayers,LeafLet以及MapBox 加载,在OpenLayers和LeafLet 中均可正常加载,但在MapBox 中加载出现跨域请求现象
3.产生原因:
通过查找文档以及Mapbox的GitHub 的issues 找到相关解释:原Issue
读下来的大致意思是:mapbox 加载WMS是需要读取 image里的数据,但只有服务器允许跨域的情况下我们才可以这么做。而LeafLet 不需要读取数据,所以可以直接加载。
那么知道产生原因,问题就好解决了。
4. 解决方案
下载
cors-filter-1.7.jar
以及java-property-utils-1.9.jar
这两个jar 包用于设置Tomcat的跨域。找到ArcGIS 安装目录下的
<安装目录>\framework\runtime\tomcat\lib
将下载的jar 拷贝到该目录下修改tomcat配置
<安装目录>\framework\runtime\tomcat\conf\web.xm
找到
<filter>
同级的末尾追加如下XML代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, POST, HEAD, PUT, DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>Set-Cookie</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>找到window的服务,重启ArcGIS Server 服务
再次使用Mapbox 请求验证问题,已经可以正常请求到WMS服务。