用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>
#1 楼
编辑webapps/geoserver/WEB-INF/web.xml
文件。在该文件中有两个对CORS的引用: br /> 您必须取消注释两个块(即从
<!--
和-->
块中删除filter
和filter-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
评论
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。