GeoServer tomcat 跨域问题解决
用Openlayers访问GeoServer发布的矢量切片是,出现跨域访问问题,即 CORS 头缺少 'Access-Control-Allow-Origin
环境版本是:tomcat-9.0.41,GeoServer 2.18.1,OpenLayers 6.4.3,
通过查找GeoServer官方文档,修改GeoServer默认配置,实现跨域访问GeoServer服务,方法如下:
在tomcat服务部署文件中 找到Geoserver服务安装目录下WEB-INF文件夹的web.xml文件(D:...\apache-tomcat-9.0.41\webapps\geoserver\WEB-INF\web.xml)
找到下面两段被注释代码,并解除注释
<!-- Uncomment following filter to enable CORS in Tomcat. Do not forget the second config block further down.
<filter>
<filter-name>cross-origin</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,PUT,DELETE,HEAD,OPTIONS</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>*</param-value>
</init-param>
</filter>
-->
<!-- Uncomment following filter to enable CORS
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
注意:上面的第一段代码实现在tomcat服务器上,允许GeoServer跨域访问的
。在该web.xml文件中,同样注释了Jett服务器上,允许GeoServer跨域访问
的代码,经测试,只能取消相应服务器的允许跨域访问
注释,不然会出现不能运行GeoServer服务的问题
上述方法是修改GeoServer的配置实现跨域,也可以通过修改tomcat服务实现允许访问,方法如下:
- 下载 cors-filter.jar 和 java-property-utils.jar,地址如下
https://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter/2.9.1
https://mvnrepository.com/artifact/com.thetransactioncompany/java-property-utils/1.16 - 将下载的两个 jar包 拷贝至 tomcat 的安装路径下 lib文件夹中,如:D:...\apache-tomcat-9.0.41\lib
最后,重启 tomcat,解决问题