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