服务端发布的服务,在未设置允许跨域时,从其他域前端访问时,会显示跨域错误,同时也不能访问到数据。

Geoserver安装完成时,默认未开启允许跨域,直接从其他域用前端的地图类库访问数据时,会访问不到数据,需要手动进行开启。

开启的方法:

在Geoserver安装完成的目录中,打开配置文件,路径是:

webapps/geoserver/WEB-INF/web.xml

使用jetty作为Server时,将以下内容取消注释:

<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>chainPreflight</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>GET,POST,PUT,DELETE,HEAD,OPTIONS</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>*</param-value>
</init-param>
</filter>

使用Tomcat作为Server时,将以下内容取消注释:

<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>

同时,无论使用何种Server,都将以下代码取消注释:

<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


或者,使用前端的web server进行代理,加上允许跨域的头,也可行。


参考内容:

​https://docs.geoserver.org/latest/en/user/production/container.html#production-container-enable-cors​