Road小白_Geoserver 跨域问题的解决

    最近,开始利用openlayer3+geoserver+.Net+SQL Server这样的框架进行WebGIS的开发,遇到访问Geoserver提供的服务,访问成功,有响应内容,但是就是没有办法在浏览器上读取的问题。

    问题描述:我利用jquery的ajax,根据该图层某一要素的坐标信息等其他参数,去访问本机的geoserver上该图层的这一要素的属性信息,其参数设置如下:

 

 在浏览器的F12中可以看到,geoserver响应了对应的html,但是在界面上始终不能alert出来,看控制台的提示,发现其为跨域访问问题,geoserver的默认为不允许跨域访问。

因为我的浏览器所在的域和geoserver所在的域不一样,之前处理跨域问题,一般是采用在服务器端人工添加’Access-Control-Allow-Origin’这样的属性,但是geoserver是封装好的地图服务,我们无法修改,在网上查了一下,找到了解决方案。

我的geoserver版本是2.12.1 安装版,操作系统为windows 7 系统。

1.由于geoserver是基于java的地图服务器,所以下载javax.serverlet.jar文件。

该文件的下载地址为:https://download.csdn.net/download/huakanjieyu/10311316。

2.将下载来的文件放到<geoserver路径>\webapps\geoserver\WEB-INF\lib路径下

3.打开<geoserver路径>\webapps\geoserver\WEB-INF 路径下的web.xml,在和<fliter>标签平级的位置添加如下代码:

    <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>GET,POST</param-value>    
     </init-param>    
     <init-param>    
         <param-name>allowedHeaders</param-name>    
         <param-value>x-requested-with,content-type</param-value>    
     </init-param>    
    </filter>  

然后,在该文件中找到和<filter-mapping>标签平级的位置,添加如下代码:

<filter-mapping>    
 <filter-name>cross-origin</filter-name>    
 <url-pattern>/*</url-pattern>    
</filter-mapping>

4.重新启动geoserver,再去测试之前的网页,发现之前geoserver相应的html可以弹出来了。

ps:非常感谢以下参考网站:

https://blog.csdn.net/mengdong_zy/article/details/51784781;

https://www.cnblogs.com/ytwy/p/6823955.html;

如果是geoserver的war版本的跨域问题解决,则可以参考以下网站:

https://blog.csdn.net/longshengguoji/article/details/53352888;

https://www.cnblogs.com/baobaodong/p/6768950.html;

转载自:https://blog.csdn.net/huakanjieyu/article/details/79712890

You may also like...