Увімкнути CORS в GeoServer (пристані)?


18

Я сподіваюся, що хтось це вже зрозумів. Щойно я встановив Geoserver 2.9 на ванільний Ubuntu 16.04 дистрибутив. Метод Geoserver 2.8 включення CORS з класом shanbe.hezoun більше не працює з Jetty 9.2.13.

Згадується, що підтримка CORS вже упакована з Jetty 9.2.13 в jetty-servlets.jar.

Лінія Jetty, складена з Geoserver, містить jetty-servlet-9.2.13.v20150730.jar в geoserver / lib, але не jetty-servlets.9.2.13.v20150730.jar. Це повинні бути одні й ті ж банки з іншою назвою?

Потрібно мати можливість включити CORS або в geoserver / etc / webdefault.xml або в geoserver / webapps / geoserver / WEB-INF / web.xml.

Я розумію, що 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
Сервлет і сервлети, схоже, не є тим самим архівом.eclipse.org/jetty/9.2.13.v20150730/apidocs/… . А деякі посилання на використані вами документи допоможуть тим, хто намагається відповісти.
користувач30184

чому б не використовувати tomcat?
Ян Тертон

1
Гарне питання. У мене Geoserver 2.9 працює з Tomcat, але хотів протестувати бінарні установки, щоб побачити, чи полегшить мені це життя. Це не сталося.
Денніс Бауш

Яке було ваше рішення?
Ківелі

1
Добре. Я просто вирішив проблему для Geoserver 2.10. Я винен, що неправильно встановив банку сервлетів. Я повинен завантажити правильні сервлети сюди, потім скопіювати в каталог "\ WEB-INF \ lib" і відредагувати " WEB-INF \ web.xml ", щоб додати параметри фільтра, як я дотримувався коментаря з zflaw у цій темі . Jetty v9 + вже підтримує CORS.
Rizky Firmansyah

Відповіді:


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>

Ви повинні скаментувати обидва блоки (тобто видалити, <!--і -->з блоків filterта filter-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>%

Оновлення 24 жовтня 2019 року

Більше не потрібно додавати наступну банку до GeoServer (принаймні, з версіями 2.13.x та пізніших версій), і це призведе до помилки . Я залишаю тут цю замітку для людей, які борються зі старими версіями.

  1. Додайте Jetty-Utility Servlets Jar, щоб відповідати версії Jetty - для поточних версій GeoServer (2.15.x) це 9.4.12.v20180830 , скопіюйте це webapps/geoserver/WEB-INF/libвсередині каталогу geoserver-2.15.0 (або куди ви розпакували поштовий індекс файл).

6
Для різних версій геосервера я здогадувався про сумісний пристрій verison, використовуючи find $GEOSERVER_HOME -name "jetty*" | grep -E [[:digit:]].
Стівен Кальт

1
Як перезапустити пристань?
user210757

Це рішення спрацювало для мене лише після того, як я також додав jetty-util до libпапки.
isshp

6

Він буде працювати, якщо ви додасте фільтр у "geoserver / webapp / geoserver / WEB-INF / web.xml", а якщо додати jar "jetty-servlets.9.2.13.v20150730.jar" inside "geoserver / webapp / geoserver / WEB-INF / lib "


Звідки мені дістати пристань-сервлет.9.2.13.v20150730.jar? Чим це відрізняється від приструна-сервлета-9.2.13.v20150730.jar, який постачається з Geoserver 2.9?
Денніс Бауш

так, його різні. Також зауважте, що папка призначення інша
Calanus

Я використовую геосервер 2.8.2. Версія монети не отримує. Можна мені підказати, як знайти версію приставки. Я бачу лише jetty-6.8.1 в C: / програмні файли (x86) / GeoServer 2.8.2 / lib
veena хосур

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

отже, я замінив:

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

автор:

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

0

Тут прийнята відповідь Яна Тертона. Оскільки я використовую ручне редагування 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

Комусь цікаво, яка версія пристані у вас є для вашої конкретної програми геосервера.

Для OSX я просто запустив геосервер і заглянув у журнал, він повинен показувати щось на кшталт:

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

Я впевнений, що це аналогічно в журналах tomcat при запуску з Linux сервера, якщо це потрібно.

Також це повинно бути видно в заголовках відповідей, тобто:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.