【开发问题】GeoServer 跨域问题解决方案

by emanjusaka from https://www.emanjusaka.com/archives/geoserver-cross-error 彼岸花开可奈何

本文为原创文章,可能会更新知识点以及修正文中的一些错误,全文转载请保留原文地址,避免产生因未即时修正导致的误导。

博客:https://www.emanjusaka.com

博客园:https://www.cnblogs.com/emanjusaka

公众号:emanjusaka的编程栈

geoserver 默认是没有开启跨域配置的,我们在启动了 geoserver 服务,发布地图图层后。前端项目想要访问服务因为 IP 和端口不一致会造成跨域问题导致我们访问服务报错。

txt 复制代码
[Error] Cannot load image http://192.168.1.200:8080/geoserver/img/wms?REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&FORMAT=image%2Fpng&STYLES=&TRANSPARENT=TRUE&LAYERS=img%3Amap_03dbe5d1&CRS=EPSG%3A4326&serverType=geoserver&WIDTH=1032&HEIGHT=1491&SRS=EPSG%3A4326&BBOX=0.0006271289520698164%2C-0.10890253786480741%2C0.08920439945988232%2C0.019071018653747274 due to access control checks.
[Error] Failed to load resource: Origin http://192.168.1.200 is not allowed by Access-Control-Allow-Origin. Status code: 200 (wms, line 0)

下面给出怎么配置开启 geoserver 允许跨域访问。

下载安装geoserver

官网地址

一般我们选择稳定版就好了,2.28.0 不再支持 jdk8 了,如果需要 jdk8 的需要下载旧版本的 geoserver。

Nightly 版即夜间构建版,是开发团队通过自动化系统每日编译的软件版本。我们一般不选 Nightly 版本。

这里选第一个就好了,通过 jar 包启动,全平台都可用。

下载后文件目录如下图所示:

进入bin目录里面有启动脚本,Windows 平台启动 bat 脚本,Mac/Linux 平台启动 sh 脚本即可。

默认启动是不支持跨域的,下面我们来配置跨域。

配置跨域

  1. 进入 geoserver 目录下的 lib 文件夹,将其中的

    jetty-servlets-9.4.57.v20241219.jarjetty-util-9.4.57.v20241219.jar

    复制到 geoserver/webapps/geoserver/WEB-INF/lib

这里有文章说去别的地方去下载这两个jar 包然后放到webapps/geoserver/WEB-INF/lib下,这里是没必要去下载的,geoserver 中已经包含有这两个 jar包了,复制过去就好了。自己去下载还要考虑版本问题,用 geoserver 自己版本一定是兼容的。

  1. 修改geoserver/webapps/geoserver/WEB-INF目录下的 web.xml 文件

    可以直接新增以下配置

    xml 复制代码
        <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>
        <filter-mapping>
            <filter-name>cross-origin</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

    也可以打开 web.xml 配置文件中的注释,这些配置已经存在了只不过是被注释了。

    其中一部分配置大概位置在 143 行到 162 行。剩下的在 197 行到 162 行。

    这里要注意只需要打开通过 Jetty 配置跨域,通过 Tomcat 配置跨域不需要打开。因为我们只复制了 Jetty 相关的 jar包,如果打开了 Tomcat 的配置会因为缺少 jar 包而报错。

相关推荐
runepic10 天前
GeoServer在CentOS部署中文乱码显示方框终极解决方案
linux·运维·centos·geoserver
gis分享者2 个月前
使用postgresql、postgis数据库作为存储仓库,发布geoserver矢量切片服务(pbf切片)、矢量切片图层组服务
postgresql·geoserver·postgis·矢量切片·服务·pbf·图层组
激动的兔子4 个月前
Geoserver修行记-SLD样式内的中文字体乱码
运维·geoserver
激动的兔子4 个月前
Geoserver修行记-连接瀚高数据库显示java.sql.SQLException: org.postgresql.util.PSQLException
java·geoserver·瀚高数据库
激动的兔子5 个月前
Geoserver修行记-安装CSS插件避坑
运维·geoserver·插件安装
Z_W_H_6 个月前
【GeoServer】WMS GetFeatureInfo URL 逐个参数解释
wms·geoserver
GISBox7 个月前
GeoServer与GISBox:地理数据服务器对比解析
geoserver·gisbox·ogc·地理数据服务器·gis sever
星火1913141 年前
arcgis jsapi 4.31 调用geoserver 发布的wms服务
arcgis·geoserver
wv1124061 年前
请求Geoserver的WTMS服务返回200不返回图片问题-跨域导致
geoserver·跨域·wtms