因为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,解决跨域。