Geoserver 安装及CORS跨域资源访问配置

时间:2024-03-19 20:29:17

在使用了geoserver发布了矢量切片地图并使用了https://github.com/Leaflet/Leaflet.VectorGrid插件访问之后,莫名的出现了跨域问题:

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin'    以下省略,想必依靠以上关键字就足够让出现这个问题的人搜到这篇文章了。
有一个有趣的现象是,本地直接调试会出现跨域,但是用IIS发布一下,访问网址就能走通了,原因未知,可以用作权宜之计,静态网页的话不会有什么影响,疑似与谷歌浏览器跨域有关,因为在这种情况下用win10的edge浏览器能访问成功。

之所以wms等服务不会出现跨域问题好像是因为它们请求的是“静态资源”,比如图片什么的,总之别在代码上动什么手脚,按照以下教程更改geoserver配置就好,看好文件路径。


作者:xushiluo
链接:https://www.jianshu.com/p/3bce123cbaf4
來源:简书

一、系统环境

  • Windows 10 64bit专业版( 版本 1703)

二、文件准备

  • geoserver-2.11.2.exe

geoserver的官网上下载,也可以到sourceforge上下载。官网:http://geoserver.org/
这个版本的geoserver是自带Jetty的(即自带web服务器)。我们不再需要单独下载Tomcat等web服务器了。

  • jdk-8u144-windows-x64.exe

geoserver依赖于JRE,实际上geoserver应该是个32位的程序。我这里安装的是一个64位的Jdk 8。有了JDK,当然JRE就有啦。虽然geoserver是32位的,但是使用jdk 64bit并没有问题。

  • jetty-servlets-9.2.13.v20150730.jar

这个是配置跨域资源访问一个很重要的jar包了,下载地址在这里:
https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-servlets
或者这里:http://repo1.maven.org/maven2/org/eclipse/jetty/jetty-servlets/
如何确定我们需要的jetty-servlets版本呢?下面会说的。

三、JDK和Geoserver安装

3.1 JDK安装。

Geoserver是依赖于JRE的,所以可以安装JRE,也可以安装JDK。geoserver-2.11.2是以来Java 8的。所以需要安装Java 8版本的JDK。我这里从官网上下载:jdk-8u144-windows-x64.exe
安装过程没什么好说的,直接下一步就行。没有什么特殊的设置。

3.2 Geoserver安装

点击安装包geoserver-2.11.2.exe,按照提示下一步就好了。选择时,记得选择安装为service,而不要选择手动启动。让它自动启动比较省事。就是下面这个界面了。端口的话,可以使用默认的8080,我安装时改为了80。因为我的80端口没有被占用。

Geoserver 安装及CORS跨域资源访问配置

四、CORS跨域资源访问

Geoserver的跨域资源访问需要修改2个地方:

  • GeoServer 2.11.2/webapps/geoserver/WEB-INF/web.xml
  • GeoServer 2.11.2/webapps/geoserver/WEB-INF/lib

4.1 修改web.xml

用notepad++打开Geoserver安装目录下webapps/geoserver/WEB-INF/web.xml。找到filter和filter-mapping相邻的地方。发现有2段xml被注释掉了。上面写的:Uncomment following filter to enable CORS 。所以,我们把下面的注释去掉即可。去掉后如下所示:

Geoserver 安装及CORS跨域资源访问配置

4.2 拷贝jetty-servlets-9.2.13.v20150730.jar到lib目录

上面提到过,需要jetty-servlets-9.2.13.v20150730.jar这个文件。我们是如何确实是9.2.13.v20150730这个版本号的呢?可以到Geoserver的安装目录下的lib文件夹中查看,如下:

Geoserver 安装及CORS跨域资源访问配置

这样就可以确定,我们需要的jetty-servlets版本是9.2.13.v20150730了。到https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-servlets
或者这里:http://repo1.maven.org/maven2/org/eclipse/jetty/jetty-servlets/ 下载即可。

下载后,将jetty-servlets-9.2.13.v20150730.jar复制到Geoserver安装目录下的webapps/geoserver/WEB-INF/lib文件夹中。

五、重启Geoserver服务

在Windows下方的任务栏空白处右键单击,选择任务管理器。点击对话框左下角的【详细信息】,就会展开详细页。找到【服务】这个页签。在geoserver项上右键单击重启即可。

Geoserver 安装及CORS跨域资源访问配置

下面,就可以愉快地使用Geoserver啦!也可以跨域访问(CORS)啦!