Geoserver 2.13.0 跨域请求 'Access-Control-Allow-Origin' 问题

使用leaflet请求GeoServer发布的WFS服务时,如果不是相同的域可能会出现如下问题:

Failed to load http://192.168.0.126:8080/geoserver/ows?service=wfs&version=1.0.0&request=GetCapabilities: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 503.

网上查到的答案都是要自己"下载geoserver使用的对应jetty版本",然而根本找不到Geoserver 2.13 对应的版本说明,偶然在Geoserver安装目录中找到了jetty-servlets.jar。

解决方法如下:

1. 添加跨域jar包jetty-servlets.jar。

\lib目录下会有jetty-servlets.jar

D:\Program Files (x86)\GeoServer 2.13.0\lib

Geoserver 2.13.0 跨域请求 'Access-Control-Allow-Origin' 问题_第1张图片

并将jar包放到\webapps\geoserver\WEB-INF\lib文件夹下。
D:\Program Files (x86)\GeoServer 2.13.0\webapps\geoserver\WEB-INF\lib

2. 修改\webapps\geoserver\WEB-INF\web.xml文件。

D:\Program Files (x86)\GeoServer 2.13.0\webapps\geoserver\WEB-INF\web.xml

找到文件中平级的位置,添加如下内容:


    cross-origin
    org.eclipse.jetty.servlets.CrossOriginFilter
    
        allowedOrigins
        *
    
    
        allowedMethods
        GET,POST
    
    
        allowedHeaders
        x-requested-with,content-type
    

filter-mapping设置

找到文件中平级的位置,添加如下内容:


   cross-origin
   /*
参考链接:
geoserver地图跨域解决方案
https://blog.csdn.net/longshengguoji/article/details/53352888
找到的OpenLayers跨域访问WFS服务出现No 'Access-Control-Allow-Origin' header is present...错误的一种解决办法
https://blog.csdn.net/shulitang/article/details/41520353
No 'Access-Control-Allow-Origin' header is present on the requested resource.'Ajax跨域访问解决方案
https://blog.csdn.net/zhoucheng05_13/article/details/53580683
从前端和后端两个角度分析jsonp跨域访问(完整实例)
https://blog.csdn.net/zhoucheng05_13/article/details/78694766

你可能感兴趣的:(GeoServer)