CORS - Tomcat - Geoserver

Все, Я пытаюсь включить CORS для Tomcat 7.0.52 для Geoserver.

Я изменил web.xml в conf в tomcat, как указано в http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter

Но это не помогло установить кросс-истоки в заголовке. Я даже попробовал его для geoserver web-inf/web.xml, который не помог.

Любые предложения приветствуются.

Спасибо!

Ответы

Ответ 1

Мне нужно сделать то же самое, чтобы избежать использования прокси в OpenLayers.

Поскольку я запускаю Ubuntu 12.04, я установил Tomcat 7.0.55 вместо стандартного 7.0.26 (установленного из пакетов).

Чтобы добавить заголовки CORS, я просто добавил к $CATALINA_HOME/conf/web.xml следующие строки:

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>*</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

а затем перезапустите tomcat.

Например, когда я пытаюсь извлечь из Geoserver URL http://development.localhost.lan/geoserver/wfs из моего приложения, запущенного на http://localhost:3000, я получаю следующие заголовки:

Запрошенные заголовки:

POST /geoserver/wfs HTTP/1.1
Host: development.localhost.lan
Origin: http://localhost:3000
X-Requested-With: XMLHttpRequest
(...)

Заголовки ответов:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:3000
Connection:Keep-Alive
Content-Disposition:inline; filename=geoserver-GetFeature.text
Content-Encoding:gzip
Content-Length:469
Content-Type:text/xml; subtype=gml/3.1.1
Date:Tue, 29 Jul 2014 21:31:08 GMT
Keep-Alive:timeout=5, max=100
Server:Apache-Coyote/1.1

Это работало с Chrome (версия 35.0.1916.153) и Firefox (версия 31.0).

Ответ 2

Мне нужно было добавить в CorsFilter следующее, чтобы убедиться, что запрос preflight 'OPTIONS' был разрешен

<init-param>
  <param-name>cors.allowed.methods</param-name>
  <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>

Ответ 3

Привет, ребята. После добавления этого script в web.xml

<filter>
    <filter-name>cross-origin</filter-name>
    <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
    <init-param>
        <param-name>allowedOrigins</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>allowedMethods</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>allowedHeaders</param-name>
        <param-value>*</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>cross-origin</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

пожалуйста, измените URL-адрес в своем ajax, как это

var boxsource = new ol.source.Vector({
        //url: '{{ resource.ows_url|safe }}',
        url: 'http://localhost:8080/geoserver/wfs?srsName=EPSG%3A4326&typename=cite:box&outputFormat=json&version=1.1.0&service=WFS&request=GetFeature',
        format: new ol.format.GeoJSON(),

        params: {'LAYERS': '{{ resource.typename }}'},
        //STYLES:{'LAYERS': '{{ resource.typename }}'}

    });

тогда это будет okey. Я обещаю