Kích hoạt CORS trong GeoServer (cầu tàu)?


17

Tôi hy vọng ai đó đã tìm ra điều này. Tôi vừa cài đặt Geoserver 2.9 trên bản phân phối Ubuntu 16.04 vanilla. Phương thức Geoserver 2.8 cho phép CORS với lớp shanbe.hezoun không còn hoạt động với Jetty 9.2.13.

Có những đề cập rằng hỗ trợ CORS đã được đóng gói với Jetty 9.2.13 trong jetty-servlets.jar.

Jetty lib được biên dịch với Geoserver chứa jetty-servlet-9.2.13.v20150730.jar trong geoserver / lib nhưng không phải jetty-servlets.9.2.13.v20150730.jar. Đây có phải là cùng một lọ với một tên khác nhau?

Có thể kích hoạt CORS trong geoserver / etc / webdefault.xml hoặc trong geoserver / webapps / geoserver / WEB-INF / web.xml.

Tôi hiểu rằng webdefault.xml được áp dụng đầu tiên và web.xml sau đó.

Tôi đã thử bộ lọc sau trong cả hai xml. Tôi chưa có thêm một ánh xạ bộ lọc. Chỉ thêm bộ lọc sẽ khiến dịch vụ Geoserver / Jetty không khởi động đúng cách.

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

1
Servlet và servlets dường như không giống nhau với kho lưu trữ.eclipse.org/jetty/9.2.13.v20150730/apidocs/ ,. Và một số liên kết đến các tài liệu bạn đã sử dụng sẽ giúp những người cố gắng trả lời.
dùng49584

Tại sao không sử dụng tomcat?
Ian Turton

1
Câu hỏi hay. Tôi có Geoserver 2.9 đang chạy với Tomcat nhưng muốn thử nghiệm thiết lập nhị phân chỉ để xem liệu điều này có giúp cuộc sống của tôi dễ dàng hơn không. Nó đã không.
Dennis Bauszus

Giải pháp của bạn là gì?
Kieveli

1
Đồng ý. Tôi vừa giải quyết vấn đề cho Geoserver 2.10. Đó là lỗi của tôi khi không cài đặt jar chính xác. Tôi nên tải xuống các servlet chính xác ở đây sau đó sao chép vào thư mục "\ WEB-INF \ lib" và chỉnh sửa " WEB-INF \ web.xml " để thêm các tham số bộ lọc khi tôi theo dõi nhận xét từ zflaw trong chuỗi này . Cầu tàu v9 + đã hỗ trợ CORS.
Rizky Firmansyah

Câu trả lời:


25

Chỉnh sửa webapps/geoserver/WEB-INF/web.xmltập tin. Có hai tham chiếu đến CORS trong tệp này:

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

Bạn phải bỏ ghi chú cả hai khối (đó là loại bỏ <!---->khỏi khối filterfilter-mapping.

Sau đó, khi bạn khởi động lại Jetty, bạn có thể kiểm tra xem mọi thứ có hoạt động không bằng cách sử dụng một lệnh như:

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

mà nếu tất cả đều tốt sẽ cho kết quả như sau:

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

Cập nhật ngày 24 tháng 10 năm 2019

Không còn cần thiết phải thêm jar sau vào GeoServer (ít nhất là với các phiên bản 2.13.x trở lên) và nó sẽ gây ra lỗi . Tôi để lại ghi chú này ở đây cho những người chiến đấu với các phiên bản cũ hơn.

  1. Thêm Jar Jetty-Utility Servlets Jar để khớp với phiên bản của Jetty - đối với các phiên bản hiện tại của GeoServer (2.15.x), đó là 9.4.12.v20180830 , sao chép tệp này vào webapps/geoserver/WEB-INF/libbên trong thư mục geoserver-2.15.0 (hoặc bất cứ nơi nào bạn giải nén zip tập tin).

6
Đối với các phiên bản khác nhau của máy chủ địa lý, tôi đã đoán được bản án cầu dao tương thích bằng cách sử dụng find $GEOSERVER_HOME -name "jetty*" | grep -E [[:digit:]].
Steven Kalt

1
Làm thế nào để bạn khởi động lại cầu cảng?
dùng210757

Giải pháp này chỉ hiệu quả với tôi sau khi tôi thêm jetty-produc vào libthư mục.
isshp

6

Nó sẽ hoạt động nếu bạn thêm bộ lọc trong "geoserver / webapp / geoserver / WEB-INF / web.xml" và nếu bạn thêm jar "jetty-servlets.9.2.13.v20150730.jar" bên trong "geoserver / webapp / geoserver / WEB-INF / lib "


Từ đâu tôi sẽ nhận được jetty-servlets.9.2.13.v20150730.jar? Điều đó có khác với jetty-servlet-9.2.13.v20150730.jar được đóng gói với Geoserver 2.9 không?
Dennis Bauszus

vâng, nó khác Cũng lưu ý thư mục đích là khác nhau
Calanus

Tôi đang sử dụng geoserver 2.8.2. Phiên bản nhỏ không nhận được. Tôi có thể cho tôi biết cách tìm phiên bản cầu tàu không. Tôi chỉ thấy jetty-6.8.1 trong C: / Chương trình tệp (x86) / GeoServer 2.8.2 / lib
veena hosur

3

với Jetty9, UbuntuServer 16.04, tôi cũng phải sửa đổi /etc/jetty9/start.ini, để không gặp phải lỗi sau:

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

giải pháp là ở đây : bạn nên kích hoạt mô-đun servlets trong $ {jetty.base} /start.ini

do đó, tôi đã thay thế:

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

bởi:

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

0

Câu trả lời được chấp nhận bởi Ian Turton là hoàn toàn tốt nhất ở đây. Vì tôi đang sử dụng Docker chỉnh sửa thủ công không phải là trường hợp. Ngoài ra, tôi không phải là một chuyên gia về SED, nhưng nhờ cấu trúc của tệp web.xml (chuỗi đích là duy nhất trong phạm vi tài liệu), tôi đã đưa ra một đoạn nhỏ:

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

Hoặc trong 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

Đối với bất cứ ai đang tự hỏi phiên bản cầu cảng nào bạn có cho ứng dụng máy chủ địa lý cụ thể của mình.

Đối với OSX, tôi chỉ cần khởi động máy chủ địa lý và xem nhật ký, nó sẽ hiển thị như sau:

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

Tôi chắc chắn rằng nó tương tự trong nhật ký tomcat khi chạy từ máy chủ linux nếu cần.

Ngoài ra, nó sẽ được hiển thị trong các tiêu đề phản hồi, tức là:

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

Tức là, vì câu trả lời được chấp nhận đề cập thử dùng lệnh curl, nó cũng sẽ xuất hiện phiên bản máy chủ:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.