जियोसर्वर (जेटी) में कोर को सक्षम करना?


18

मुझे आशा है कि किसी ने पहले ही यह पता लगा लिया है। मैंने अभी एक वेनिला उबंटू 16.04 डिस्ट्रो पर जियोसर्वर 2.9 स्थापित किया है। कोर को सक्षम करने के लिए Geoserver 2.8 विधि shanbe.hezoun वर्ग को जेटी 9.2.13 के साथ काम नहीं करती है।

उल्लेख किया गया है कि जेटी 9.2 -3 के साथ पहले से ही जेटी-कोरलेट्स.जर में कॉर्स समर्थन पैक किया गया है।

जियोसर्वर के साथ संकलित जेट्टी की देयता में एक जेटी-सर्वलेट-9.2.13.v20150730.jar शामिल है जो कि जियोसेवर / लीब में है, लेकिन जेटी-सर्वलेट्स में नहीं ।.9.2.13.v20150730.jar। क्या इन्हें एक अलग नाम के साथ एक ही जार माना जाता है?

यह संभव है कि या तो जियोसर्वर / etc / webdefault.xml में या geoserver / webapps / geoserver / WEB-INF / web.xml में CORS को सक्षम किया जाए।

मेरी समझ यह है कि पहले webdefault.xml और उसके बाद web.xml लागू किया जाता है।

मैं दोनों xml में फिल्टर का पालन करने की कोशिश की है। जहां तक ​​फिल्टर मैपिंग जोड़ने का सवाल है, मुझे नहीं मिला है। अकेले फ़िल्टर जोड़ने से जियोसेवर / जेटी सेवा उचित रूप से शुरू नहीं हो पाएगी।

<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/… । और आपके द्वारा उपयोग किए गए दस्तावेजों के कुछ लिंक उन लोगों की मदद करेंगे जो जवाब देने की कोशिश करते हैं।
user30184

क्यों नहीं टोंक का उपयोग करें?
इयान Turton

1
अच्छा प्रश्न। मेरे पास जियोसेवर 2.9 है जो टॉमकैट के साथ चल रहा है लेकिन बाइनरी सेटअप का परीक्षण करना चाहता हूं ताकि यह देखा जा सके कि इससे मेरा जीवन आसान हो जाएगा। यह नहीं था
डेनिस बाऊज़स

आपका हल क्या था?
कीवेली

1
ठीक है। मैंने अभी पहले ही जियोसेवर 2.10 के लिए समस्या हल कर दी है। यह मेरी गलती है कि सर्वलेट्स जार को सही तरीके से स्थापित नहीं किया गया है। मुझे यहाँ सही सर्वलेट्स को डाउनलोड करना चाहिए फिर निर्देशिका "\ WEB-INF \ lib" में कॉपी करें और फ़िल्टर पैरामीटर को जोड़ने के लिए " WEB-INF \ web.xml " को संपादित करें क्योंकि मैंने इस थ्रेड में zflaw से टिप्पणी का पालन किया था । Jetty v9 + ने पहले ही CORS का समर्थन किया है।
रिज़्की फ़र्मेनशाह

जवाबों:


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>

आप चाहिए uncomment दोनों ब्लॉक (कि निकालें है <!--और -->से filterऔर filter-mappingब्लॉक।

फिर जब आप जेट्टी को पुनः आरंभ करते हैं तो आप यह परख सकते हैं कि सब कुछ एक कमांड का उपयोग करके काम कर रहा है:

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

जियोसर्वर (कम से कम 2.13.x और बाद के संस्करणों के साथ) को निम्न जार में जोड़ना आवश्यक नहीं है और यह एक त्रुटि का कारण होगा । मैं पुराने संस्करणों से लड़ने वाले लोगों के लिए इस नोट को यहां छोड़ रहा हूं।

  1. जेट्टी के संस्करण से मिलान करने के लिए जेट्टी-यूटिलिटी सर्वलेट्स जार जोड़ें - जियोसर्वर (2.15.x) के वर्तमान संस्करणों के लिए यह 9.4.12.v20180830 है , इसे webapps/geoserver/WEB-INF/libजियोसर्वर -215.0 निर्देशिका के अंदर कॉपी करें (या जहाँ भी आपने ज़िप अनपैक किया है। फ़ाइल)।

6
जियोसर्वर के विभिन्न संस्करणों के लिए, मैं संगत जेटी वर्जन का उपयोग करने का अनुमान लगा रहा हूं find $GEOSERVER_HOME -name "jetty*" | grep -E [[:digit:]]
स्टीवन काल्ट

1
आप जेट्टी को कैसे पुनः आरंभ करते हैं?
user210757

यह समाधान मेरे लिए काम किया के बाद ही मैं जोड़ा घाट-util को libसाथ ही साथ फ़ोल्डर।
isshp

6

यदि आप "geoserver / webapp / geoserver / WEB-INF / web.xml" में फ़िल्टर जोड़ते हैं और यदि आप "getyerver / webapp / geoserver" अंदर "jar" jetty-servlets.9.2.13.v20150730.jar "जोड़ते हैं तो यह काम करेगा। / वेब-INF / lib "


मुझे जेट्टी-सर्वलेट्स कहां से मिलेंगे ।.9.2.13.v20150730.jar? क्या यह जेटी-सर्वलेट-9.2.13.v20150730.jar के लिए भिन्न है जो कि जियोसर 2.9 के साथ पैक किया गया है?
डेनिस बाऊज़स

हाँ इसके अलग। ध्यान दें कि गंतव्य फ़ोल्डर अलग है
Calanus

मैं geoserver 2.8.2.Jetty संस्करण का उपयोग कर रहा नहीं getting.Can किसी भी मुझे बताओ कि घाट version.I बजे सी में केवल घाट-6.8.1 देखकर लगता है: / प्रोग्राम फ़ाइलें (x86) / GeoServer 2.8.2 / lib
वीणा होसुर

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

इयान टर्टन द्वारा स्वीकार किए गए उत्तर यहां बिल्कुल अच्छा है। चूंकि मैं डोकर मैनुअल संपादन का उपयोग कर रहा हूं, इसलिए ऐसा नहीं है। इसके अलावा, मैं एक 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

या डॉकरफाइल में:

# 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

मुझे यकीन है कि यदि आवश्यक हो तो लिनक्स सर्वर से चलने पर यह टॉमकैट लॉग में समान है।

इसके अलावा, यह प्रतिक्रिया हेडर में दिखाई देनी चाहिए अर्थात:

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

यानी, जैसा कि स्वीकृत उत्तर में बताया गया है कि कर्ल कमांड का उपयोग करने की कोशिश करें, यह सर्वर संस्करण भी प्रस्तुत करेगा:

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.