我希望有人已经知道了这一点。我刚刚在香草Ubuntu 16.04发行版上安装了Geoserver 2.9。通过shanbe.hezoun类启用CORS的Geoserver 2.8方法在Jetty 9.2.13中不再起作用。 .jar。

用Geoserver编译的Jetty库在geoserver / lib中包含一个jetty-servlet-9.2.13.v20150730.jar,但不包含jetty-servlets.9.2.13.v20150730.jar。

应该可以在geoserver / etc / webdefault.xml或geoserver / webapps / geoserver / WEB-INF / web中启用CORS吗? .xml。

我的理解是,首先应用webdefault.xml,然后再应用web.xml。我还没有添加过滤器映射。单独添加过滤器将导致Geoserver / Jetty服务无法正常启动。

<filter>
    <filter-name>cross-origin</filter-name>
    <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
</filter>


评论

Servlet和Servlet似乎不是相同的archive.eclipse.org/jetty/9.2.13.v20150730/apidocs/…。某些指向您使用过的文档的链接会帮助那些试图回答的人。

为什么不使用tomcat?

好问题。我有与Tomcat一起运行的Geoserver 2.9,但想测试二进制设置只是为了看看这是否会使我的生活更轻松。没有。

您的解决方案是什么?

好。我刚刚已经解决了Geoserver 2.10的问题。我没有正确安装servlets jar是我的错。我应该在此处下载正确的servlet,然后将其复制到目录“ \ WEB-INF \ lib”并编辑“ WEB-INF \ web.xml”以添加过滤器参数,因为我遵循了该线程中zflaw的注释。 Jetty v9 +已经支持CORS。

#1 楼

编辑webapps/geoserver/WEB-INF/web.xml文件。在该文件中有两个对CORS的引用: br />

您必须取消注释两个块(即从<!---->块中删除filterfilter-mapping

然后,重新启动Jetty时,您可以测试一切正常通过使用如下命令: > 2019年10月24日更新

不再需要将以下jar添加到GeoServer(至少在2.13.x及更高版本中),这将导致错误。在这里供较早版本的人们使用。


添加Jetty-Utility Servlets Jar以匹配Jetty的版本-当前版本的GeoServer(2.15.x)为9.4.12.v20180830 ,请将其复制到geoserver-2.15.0目录(或解压缩zip文件的位置)内的webapps/geoserver/WEB-INF/lib


评论


对于不同版本的geoserver,我一直在使用find $ GEOSERVER_HOME -name“ jetty *” |来猜测兼容的码头版本。 grep -E [[:digit:]]

–史蒂文·卡尔特(Steven Kalt)
17-10-12在20:42

如何重启码头?

–user210757
18年7月31日在17:41

仅在将jetty-util也添加到lib文件夹后,此解决方案才对我有用。

– isshp
19年7月2日在7:50

#2 楼

如果您在“ geoserver / webapp / geoserver / WEB-INF / web.xml”中添加过滤器,并且在“ geoserver / webapp / geoserver”中添加jar“ jetty-servlets.9.2.13.v20150730.jar”,它将起作用。 / WEB-INF / lib“

评论


从哪里可以得到jetty-servlets.9.2.13.v20150730.jar?这与与Geoserver 2.9打包在一起的jetty-servlet-9.2.13.v20150730.jar有什么不同吗?

–丹尼斯·鲍祖斯(Dennis Bauszus)
16-10-4在15:57

是的,与众不同。另请注意,目标文件夹不同

–卡卢努斯
17年1月1日在20:42

我正在使用geoserver 2.8.2.Jetty版本没有得到。可以告诉我如何找到jetty版本。我在C:/ Program Files(x86)/ GeoServer 2.8.2 / lib中仅看到jetty-6.8.1

–veena hosur
18-2-20在6:41

#3 楼

使用Jetty9,UbuntuServer 16.04,我还不得不修改/etc/jetty9/start.ini,以免出现以下错误:

2018-03-31 15:10:01.769:WARN:oejuc.AbstractLifeCycle:main: FAILED cross-origin: javax.servlet.UnavailableException: org.eclipse.jetty.servlets.CrossOriginFilter javax.servlet.UnavailableException: org.eclipse.jetty.servlets.CrossOriginFilter

:您应该在$ {jetty.base} /start.ini

中启用servlets模块,因此,我用以下命令替换了


--module=deploy,http,jsp,jstl,websocket,ext,resources


#4 楼

在这里,Ian Turton接受的答案绝对是最好的。字符串在文档范围内是唯一的),我给出了一些摘要:

sed -i 's_<!-- <filter>_<filter>_' web.xml
sed -i 's_</filter> -->_</filter>_' web.xml
sed -i 's_<!-- <filter-mapping>_<filter-mapping>_' web.xml
sed -i 's_</filter-mapping> -->_</filter-mapping>_' web.xml


或者在Dockerfile中:

# enable CORS
RUN wget -q http://central.maven.org/maven2/org/eclipse/jetty/jetty-servlets/9.2.13.v20150730/jetty-servlets-9.2.13.v20150730.jar -P ${GEOSERVER_INSTALL_DIR}/WEB-INF/lib \
 && sed -i 's_<!-- <filter>_<filter>_' ${GEOSERVER_INSTALL_DIR}/WEB-INF/web.xml \
 && sed -i 's_</filter> -->_</filter>_' ${GEOSERVER_INSTALL_DIR}/WEB-INF/web.xml \
 && sed -i 's_<!-- <filter-mapping>_<filter-mapping>_' ${GEOSERVER_INSTALL_DIR}/WEB-INF/web.xml \
 && sed -i 's_</filter-mapping> -->_</filter-mapping>_' ${GEOSERVER_INSTALL_DIR}/WEB-INF/web.xml


#5 楼

任何人都想知道您的特定geoserver应用程序具有哪个版本的码头。

对于OSX,我只是启动了geoserver,并在日志中查看了类似以下内容的文件:

2019-05-10 07:25:13.444:INFO:oejs.Server:startup executor: jetty-9.2.13.v20150730


我确定它与从Linux服务器运行时,tomcat日志(如果需要)。

此外,它也应该在响应标头中可见,即:

Connection: close
Server: Jetty(9.2.13.v20150730)
X-Frame-Options: SAMEORIGIN


即,因为接受的答案提到尝试使用curl命令,它也会显示服务器版本:

curl -v -H "Origin: http://example.com" http://astun-desktop:9080/geoserver/wfs\?service\=WFS\&version\=2.0.0\&request\=GetFeature\&typenames\=sf:bugsites\&filter\=%3Cfes:Filter%20xmlns:fes\=%22http://www.opengis.net/fes/2.0%22%3E%3Cfes:ResourceId%20rid\=%22bugsites.3%22/%3E%3C/fes:Filter%3E