GeoServer'da (iskelede) CORS etkinleştiriliyor mu?


18

Umarım biri bunu çoktan çözmüştür. Geoserver 2.9'u bir vanilya Ubuntu 16.04 dağıtımına yükledim. Shanbe.hezoun sınıfıyla CORS'yi etkinleştirmek için Geoserver 2.8 yöntemi artık Jetty 9.2.13 ile çalışmaz.

CORS desteğinin, jetty-servlets.jar içinde zaten Jetty 9.2.13 ile paketlendiğinden bahsedilmektedir.

Geoserver ile derlenen Jetty lib, geoserver / lib'de bir jetty-servlet-9.2.13.v20150730.jar içerir ancak jetty-servlet'leri içermez.9.2.13.v20150730.jar. Bunların farklı bir isimle aynı kavanoz olması mı gerekiyor?

CORS'yi geoserver / etc / webdefault.xml veya geoserver / webapps / geoserver / WEB-INF / web.xml'de etkinleştirmek mümkün olmalıdır.

Anladığım kadarıyla önce webdefault.xml ve daha sonra web.xml uygulanıyor.

Her iki xml'de filtreyi takip etmeyi denedim. Bir filtre eşlemesi eklemek kadar uzağım yok. Filtrenin tek başına eklenmesi Geoserver / Jetty hizmetinin düzgün başlatılmamasına neden olur.

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

1
Servlet ve sunucu uygulamaları aynı arşiv gibi görünmüyor . Eclipse.org/jetty/9.2.13.v20150730/apidocs/… . Kullandığınız belgelere bazı bağlantılar yanıt vermeye çalışanlara yardımcı olacaktır.
user30184

neden tomcat kullanmıyorsunuz?
Ian Turton

1
İyi soru. Tomcat ile çalışan Geoserver 2.9'um var ama bunun sadece hayatımı kolaylaştıracağını görmek için ikili kurulumu test etmek istedim. Olmadı.
Dennis Bauszus

Çözümünüz neydi?
Kieveli

1
Tamam. Geoserver 2.10 için sorunu zaten çözdüm. Servlet kavanozunu doğru şekilde takmamak benim hatam. Ben doğru servlet indirmelisiniz burada daha sonra dizine kopyalayın "\ WEB-INF \ lib" ve düzenle " WEB-INF \ web.xml " Ben bunda zflaw yorumunu takip gibi filtre parametreleri eklemek olmaya iplik . Jetty v9 + zaten CORS'i destekledi.
Rizky Firmansyah

Yanıtlar:


27

Edit webapps/geoserver/WEB-INF/web.xmldosyasını. Bu dosyada iki CORS referansı vardır :

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

ve

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

Sen gerekir yorumsuz hem blokları (yani kaldırma olduğunu <!--ve -->gelen filterve filter-mappingbloklar.

Daha sonra Jetty'yi yeniden başlattığınızda, aşağıdaki gibi bir komut kullanarak her şeyin çalıştığını test edebilirsiniz:

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

eğer her şey yolundaysa, şöyle bir sonuç verecektir:

> 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>%

Güncelleme 24 Ekim 2019

GeoServer'a (en azından 2.13.x ve üzeri sürümlerde) aşağıdaki kavanozun eklenmesi artık gerekmemektedir ve hataya neden olacaktır . Eski notlarla savaşan insanlar için bu notu burada bırakıyorum.

  1. Jetty sürümü ile eşleşecek şekilde Jetty-Utility Servlets Jar ekleyin - GeoServer'ın (2.15.x) güncel sürümleri için 9.4.12.v20180830'dur , bunu webapps/geoserver/WEB-INF/libgeoserver-2.15.0 dizininin içine kopyalayın (veya zip'i paketini açtığınız her yere) dosya).

6
Geoserver'ın farklı sürümleri için, uyumlu iskele verisini kullanarak tahmin ediyorum find $GEOSERVER_HOME -name "jetty*" | grep -E [[:digit:]].
Steven Kalt

1
İskeleyi nasıl yeniden başlatırsınız?
user210757

Bu çözüm diye ekledim sonra benim için çalıştı dalgakıran-util için libde klasörde.
isshp

6

Filtreyi "geoserver / webapp / geoserver / WEB-INF / web.xml" içine eklerseniz ve "jetty-servlets.9.2.13.v20150730.jar" içi "geoserver / webapp / geoserver / WEB-INF / lib"


İskele sunucularını nereden bulabilirim.9.2.13.v20150730.jar? Geoserver 2.9 ile paketlenmiş jetty-servlet-9.2.13.v20150730.jar'dan farklı mıdır?
Dennis Bauszus

evet bu farklı. Ayrıca hedef klasörün farklı olduğunu unutmayın
Calanus

Ben getting.Can herhangi nasıl C sadece dalgakıran-6.8.1 görerek dalgakıran version.I AM bulmak söyleme geoserver 2.8.2.Jetty sürümünü kullanıyorum: / Program Files (x86) / GeoServer 2.8.2 / lib
veena hosur

3

Jetty9, UbuntuServer 16.04 ile, aşağıdaki hatayı almamak için /etc/jetty9/start.ini dosyasını da değiştirmek zorunda kaldım:

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

çözüm burada : $ {jetty.base} /start.ini dosyanızdaki sunucu uygulaması modülünü etkinleştirmelisiniz

sonuç olarak, ben değiştirdim:

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

tarafından :

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

0

Ian Turton tarafından kabul edilen cevap kesinlikle en iyisidir. Docker'ı kullandığım için manuel düzenleme böyle değil. Ayrıca bir SED gurusu değilim, ancak web.xml (hedef dizeler belge kapsamında benzersizdir) yapısı sayesinde, küçük snippet ile geliyorum:

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

Veya Dockerfile'da:

# 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

Herkes sizin için geotyver uygulamanız için hangi iskele sürümü merak ediyor.

OSX için sadece geoserver'ı başlattım ve günlüğe baktım, şöyle bir şey göstermelidir:

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

Gerekirse bir linux sunucusundan çalışırken tomcat günlüklerinde benzer olduğundan eminim.

Ayrıca, yanıt başlıklarında da görünmelidir:

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

Yani, kabul edilen cevaptan bahsederken curl komutunu kullanmayı denediğinde sunucu sürümünü de gösterecektir:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.