GeoServer 开启CORS跨域请求访问
目录
GeoServer官方文档的方法
GeoServer
的官方文档中有给出GeoServer
开启CORS
跨域请求访问的方法,即在webapps/geoserver/WEB-INF/web.xml
路径下将以下内容取消注释:
<web-app>
<!--...-->
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--...-->
</web-app>
基于Tomcat容器的方法
实际使用过程中我们可能会遇到一个问题,正如官方文档中所说,独立安装版的GeoServer
是基于Jetty
这个应用容器的,而如果GeoServer
是运行在其他应用容器中
(比如Apache Tomcat
),则上述做法会使得GeoServer
无法运行,控制台报错:
SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal One or more Filters failed to
start. Full details will be found in the appropriate container log file
大致意思就是说有一个Filter
无法正常启动,导致应用无法正常运行。
我所使用的GeoServer
是基于Tomcat
自行构建的,因此开启CORS
的方式会有一些不同。具体做法是在webapps/geoserver/WEB-INF/web.xml
中添加以下内容:
<web-app>
<!--...-->
<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>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--...-->
</web-app>
官方文档写得没有错,但是没有考虑到其他的情况。而我盲目地套用官方文档的做法,不分清实际情况,使得被这个问题所困扰。
参考文章
原文地址: http://www.trojx.me/2018/08/07/geoserver-cors/index.html
转载自:https://blog.csdn.net/weixin_33937499/article/details/86983888