1. 程式人生 > >基於CORS的GeoServer跨域訪問策略

基於CORS的GeoServer跨域訪問策略

由於 pro sse servlet 頭信息 targe 腳本 org web.xml

GeoServer的跨域訪問問題,有多種解決方法,本文介紹一種基於CORS的GeoServer跨域訪問方法。

CORS簡介

CORS是一個W3C標準,全稱是"跨域資源共享"(Cross-origin resource sharing)。 CORS是一種允許當前域(domain)的資源(比如html/js/web service)被其他域(domain)的腳本請求訪問的機制,它允許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制。通常由於同域安全策略(the same-origin security policy)瀏覽器會禁止這種跨域請求。

CORS需要瀏覽器和服務器同時支持。瀏覽器支持情況如下圖所示:

技術分享

整個CORS通信過程,都是瀏覽器自動完成,不需要用戶參與。對於開發者來說,CORS通信與同源的AJAX通信沒有差別,代碼完全一樣。瀏覽器一旦發現AJAX請求跨源,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求,但用戶不會有感覺。 因此,實現CORS通信的關鍵是服務器。只要服務器實現了CORS接口,就可以跨源通信。fdsafds

基於CORS的GeoServer跨域訪問

首先下載cors壓縮包,下載地址http://shanbe.hezoun.com/cors.zip ,解壓開就是一個org文件夾。

技術分享

將此文件夾復制到GeoServer目錄下:D:\Program Files (x86)\GeoServer 2.7.6\webapps\geoserver\WEB-INF\classes

技術分享

配置Geoserver工程的web.xml文件,該文件目錄:D:\Program Files (x86)\GeoServer 2.7.6\webapps\geoserver\WEB-INF\web.xml

在filter集合末尾額外加一個filter,代碼如下:

   <filter>  
      <filter-name>cross-origin</filter-name>  
        
      <filter-class>org.mortbay.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-mapping>  
        <filter-name>cross-origin</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  

至此配置完畢。重啟GeoServer即可利用CORS來跨域訪問了

基於CORS的GeoServer跨域訪問策略