Usando OpenLayers 3, no puedo hacer que este mensaje desaparezca:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://myserver:8085/geoserver/sf/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=sf:view1&maxFeatures=1&outputFormat=JSON. This can be fixed by moving the resource to the same domain or enabling CORS.
Este es el código:
// Ol3 only supports Projections "EPSG:4326" and "EPSG:3857". For every other projection you need proj4js
proj4.defs("EPSG:2236", "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs");
// Leases Layer
var myLayer = new ol.layer.Vector({
source: new ol.source.GeoJSON({
projection: 'EPSG:2236',
url: 'http://myserver:8085/geoserver/sf/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=sf:view1&maxFeatures=1&outputFormat=JSON',
crossOrigin: null
})
});
// View
var view = new ol.View({
projection: 'EPSG:2236',
center: [0, 0],
zoom: 4
});
// Map
var map = new ol.Map({
target: 'map',
renderer: 'canvas',
layers: [myLayer],
view: view
});
He intentado establecer la configuración de crossOrigin en:
crossOrigin: null
crossOrigin: 'null'
crossOrigin: 'anonymous'
Solo veo el control de acercamiento / alejamiento, pero la capa no se representa.
Fui con la opción 3 de Simon a continuación. Habilité CORS en GeoServer copiando los archivos jar necesarios de jetty-servlets y habilitándolo en \ WEB-INF \ 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>
<filter-pattern>/*</filter-pattern>
</filter-mapping>
Después de hacer eso, probé la página nuevamente y recibí el mismo error:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://myserver:8085/geoserver/sf/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=sf:view1&maxFeatures=1&outputFormat=JSON. This can be fixed by moving the resource to the same domain or enabling CORS.
Parece que todavía me falta algo. ¿Tengo que hacer algo desde el lado de OpenLayers?
Terminé deshaciéndome de Jetty y desinstalando GeoServer por completo. El problema es que cuando instalas el instalador de geoserver windows, ¡instala una versión de jetty que tiene 4 años! (Jetty versión 6.1.8) Aunque había copiado los archivos jar para CORS, solo es compatible con Jetty 7+.
Descubrí que puedes instalar un archivo WAR. Decidí usar Tomcat ya que eso es en lo que GeoServer se prueba principalmente según esta nota del sitio web de GeoServer:
Nota GeoServer se ha probado principalmente con Tomcat y, por lo tanto, estas instrucciones pueden no funcionar con otras aplicaciones de contenedor.
Estas son las instrucciones para instalar el archivo WAR:
http://docs.geoserver.org/stable/en/user/installation/war.html
Este es un buen video instructivo también:
https://www.youtube.com/watch?v=YEOA8WWWVCw
Después de completar la instalación, habilita CORS: