在GeoServer中启用CORS(码头)?


18

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

提到在Jetty-servlets.jar中,Jetty 9.2.13已打包了CORS支持。

用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.xml中启用CORS。

我的理解是,首先应用webdefault.xml,然后再应用web.xml。

我已经尝试了两个xml中的以下过滤器。我还没有添加过滤器映射。单独添加过滤器将导致Geoserver / Jetty服务无法正常启动。

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

1
Servlet和Servlet似乎不是相同的archive.eclipse.org/jetty/9.2.13.v20150730/apidocs/…。并且指向您使用过的文档的一些链接将帮助那些试图回答的人。
user30184 '16

为什么不使用tomcat?
伊恩·特顿

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

您有什么解决方案?
Kieveli 2016年

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

Answers:


27

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

<!-- Uncomment following filter to enable CORS -->
<filter>
  <filter-name>cross-origin</filter-name>
     <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
  </filter>

<!-- Uncomment following filter to enable CORS -->
<filter-mapping>
   <filter-name>cross-origin</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

必须取消注释两个块(即删除<!--,并-->filterfilter-mapping块。

然后,当您重新启动Jetty时,可以使用以下命令来测试一切是否正常:

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

如果一切顺利,将会得到类似以下结果:

> User-Agent: curl/7.35.0
> Host: astun-desktop:9080
> Accept: */*
> Origin: http://example.com
>  
< HTTP/1.1 200 OK 
< Access-Control-Allow-Origin: http://example.com 
< Access-Control-Allow-Credentials: true 
< Access-Control-Expose-Headers:  
< Content-Type: text/xml; subtype=gml/3.2 
< Content-Disposition: inline; filename=geoserver-GetFeature.text 
< Transfer-Encoding: chunked
* Server Jetty(9.2.13.v20150730) is not blacklisted 
< Server: Jetty(9.2.13.v20150730) 
< 
* Connection #0 to host astun-desktop left intact 
<?xml version="1.0" encoding="UTF-8"?><wfs:FeatureCollection xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sf="http://www.openplans.org/spearfish" xmlns:wfs="http://www.opengis.net/wfs/2.0" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" numberMatched="1" numberReturned="1" timeStamp="2017-07-30T15:58:31.423Z" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://astun-desktop:9080/geoserver/schemas/wfs/2.0/wfs.xsd http://www.openplans.org/spearfish http://astun-desktop:9080/geoserver/wfs?service=WFS&amp;version=2.0.0&amp;request=DescribeFeatureType&amp;typeName=sf%3Abugsites http://www.opengis.net/gml/3.2 http://astun-desktop:9080/geoserver/schemas/gml/3.2.1/gml.xsd"><wfs:member><sf:bugsites gml:id="bugsites.3"><sf:the_geom><gml:Point srsName="urn:ogc:def:crs:EPSG::26713" srsDimension="2"><gml:pos>590529 4914625</gml:pos></gml:Point></sf:the_geom><sf:cat>3</sf:cat><sf:str1>Beetle site</sf:str1></sf:bugsites></wfs:member></wfs:FeatureCollection>%

更新2019年10月24日

不再需要将以下jar添加到GeoServer(至少在2.13.x及更高版本中),这将导致错误。我在这里留给那些与旧版本抗争的人。

  1. 添加Jetty-Utility Servlets Jar以匹配Jetty的版本-对于当前版本的GeoServer(2.15.x),它是9.4.12.v20180830,将其复制到webapps/geoserver/WEB-INF/libgeoserver-2.15.0目录中(或解压缩zip的任何位置)文件)。

6
对于不同版本的geoserver,我一直在使用猜测兼容的码头版本find $GEOSERVER_HOME -name "jetty*" | grep -E [[:digit:]]
史蒂文·卡尔特

1
如何重启码头?
user210757 '18

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

6

如果您在“ 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有什么不同吗?
丹尼斯·鲍祖斯

是的,与众不同。还要注意目标文件夹是不同的
Calanus'1

我使用的GeoServer 2.8.2.Jetty版本没有任何getting.Can告诉我如何找到码头version.I上午仅C码头-6.8.1看到:/程序文件(x86)/ GeoServer的2.8.2 / lib目录
维纳hosur18 '02

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

创建人:

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

0

Ian Turton接受的答案绝对是最好的。由于我使用的是Docker,因此无法进行手动编辑。我也不是SED专家,但是由于web.xml的结构(目标字符串在文档作用域中是唯一的),我给出了一些摘要:

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

0

任何人都想知道您的特定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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.