Sửa lỗi Cross domain (Access-Control-Allow-Origin) đối với GeoServer/Tomcat thông qua Proxy

Table of Contents

Access-Control-Allow-Origin). Hôm trước sinh viên mình dạy trong lúc cần xuất style GeoServer và Label cho đối tượng cũng gặp lỗi này khi chạy tool của mình.

http://dev.dothanhlong.org/phpsld/
[caption id="attachment_1580" align="alignnone" width="1280"]Sửa lỗi Cross domain (Access-Control-Allow-Origin) đối với GeoServer/Tomcat Sửa lỗi Cross domain (Access-Control-Allow-Origin) đối với GeoServer/Tomcat[/caption] Cách fix thì mình đã có cách cho cả 2 cách cài là thông qua GeoServer Web Archive hoặc GeoServer Installer

Fix lỗi Access-Control-Allow-Origin cho GeoServer khi cài bằng GeoServer Web Archive (Thông qua Tomcat cài riêng)

https://dothanhlong.org/sua-loi-cors-no-access-control-allow-origin-header-tomcatgeoserver/

Fix lỗi Access-Control-Allow-Origin cho GeoServer khi cài bằng GeoServer Window Installer (File *.exe)

https://q2a.dothanhlong.org/?qa=19/enabling-cors-in-geoserver-jetty&show=24#a24
Tuy nhiên, cả 2 cách này đều là khi mình deploy GeoServer trên Window. Nay mình đã setup GeoServer trên VPS Linux của mình thì cũng gặp lỗi trên, tuy nhiên mình sửa cấu hình Tomcat tương tự như trên Window thì lại không được. Thế là nảy sinh ý dùng proxy để sửa lỗi Access-Control-Allow-Origin. Trước mình cũng dùng proxy để lấy GetFeatureInfo từ WMS của QGISCloud và ok. Nay dùng lại.

Cách sử dụng proxy để bypass Access-Control-Allow-Origin

Đầu tiên download file proxy.php mình đã custom lại ở đây
https://drive.google.com/open?id=1NwBlRN3k8cx2dsWQ4k0WtrnPyhYOuh6x

Đối với Openlayers 2

Khai báo dòng sau ở đầu file js bạn khai báo map
OpenLayers.ProxyHost = "proxy.php?url=";

Đối với gọi Ajax

Thêm vào trước url gọi ajax, còn url thì lại là tham số của url trong proxy, ví dụ đối với mình
http://dev.dothanhlong.org/phpsld_v2/proxy.php?url=http%3A%2F%2Fdev.dothanhlong.org%3A8080%2Fgeoserver%2Fdothanhlong%2Fwms%3Fservice%3DWFS%26version%3D1.0.0%26request%3DDescribeFeatureType%26typename%3Ddothanhlong%3Avn_provinces%26outputformat%3Dapplication%2Fjson&_=1536310016387

Lưu ý

Tham số url trong proxy phải được encode trước khi truyền vào proxy, nếu không GeoServer sẽ báo lỗi
https://meyerweb.com/eric/tools/dencoder/
[caption id="attachment_1579" align="alignnone" width="1271"]Get Json form GeoServer Get Json form GeoServer[/caption]

Lưu ý 2:

Khi gọi Ajax để get json thông qua proxy (như hình trên) thì kết quả nhận được sẽ là chuỗi chứ không phải json object như bình thường. Vì vậy chúng ta phải có một bước convert string 2 json nữa
https://q2a.dothanhlong.org/?qa=138/javascript-string-to-json&show=138#q138
Vậy là xong. Giờ người nông dân lại đi fix lại cái PHP SLD của mềnh đây :v [caption id="attachment_1588" align="alignnone" width="1280"]Tool make style SLD for GeoServer Tool make style SLD for GeoServer[/caption] Hi vọng giúp được một số nhỏ mọi người^^ -soiqualang-chentreu-  ]]>

Leave a Reply

Your email address will not be published. Required fields are marked *