因为tomcat容器本身或者geoserver的安全策略,在tomcat中部署geoserver,导致在其他应用使用geoserver地图服务会出现跨域现象。
通常会通过nginx的反向代理解决这个问题。
但是安装nginx反过来又会让流程变得繁琐,将大象装到冰箱里就不止三部了。
我们知道,GeoServer的项目是一个完整的Java(J2EE)系统。
所以,基于geoserver本身配置可以来解决这个问题。
但是百度搜索的结果不是过时,就是毫无责任的、误导人的遍地复制粘贴,也说明现在搜索引擎的尴尬局面:blog、论坛、贴吧的时代一去不复返,robot协议更加苛刻,搜索爬虫处于严重饥饿状态。 所以我们拿到的结果显得匮乏,难以命中问题。
好在chatgpt解决了一些问题,但是使用成本和难以预料的胡说八道,又让我们不得不审视其专业性。
废话不再多说
简要说下就是在tomcat中部署完geoserver,能正常访问后,通过修改geoserver的web.xml文件,将两个jar包添加到geoserver的lib目录,就能完美解决跨域问题,重点是找到不同geoserver所对应的jar版本
下面细说步骤:
1、修改geoserver下的web.xml(路径一般为:/tomcat/webapps/geoserver/WEB-INF/web.xml),将文件中有关cross-origin的注释放开,但是可能会找错地方,最终造成geoserver打不开,保险的方式是:在文件空行中(如大约150行左右)直接添加以下配置;
1 | <filter> |
2、接下来我们需要找到geoserver对应版本的jetty-servlets和jetty-util的jar文件;
3、首先我们确认下载的geoserver版本,如下
3、然后复制版本号,拼接到如下url并访问,https://github.com/geoserver/geoserver/blob/版本号/src/pom.xml (如:https://github.com/geoserver/geoserver/blob/2.23.2/src/pom.xml);
4、Ctrl+F搜索网页内容:jetty.version,复制版本号;
5、将版本号复制以下两个url中:
(1)https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-servlets/版本号 (如:https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-servlets/9.4.51.v20230217)
(2)https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-util/版本号 (如:https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-util/9.4.51.v20230217)
6、单击jar下载文件;

7、将jetty-servlets和jetty-util的jar包拷贝到geoserver下的lib目录,路径为:tomcat/webapps/geoserver/WEB-INF/lib/
8、重启geoserver,暨重启tomcat,解决跨域。
