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

Hôm nay mình cần chạy tool Gen SLD Map của mình thì gặp lại lỗi này (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/

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

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)

Sửa lỗi CORS No ‘Access-Control-Allow-Origin’ header Tomcat/Geoserver

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/

Get Json form GeoServer
Get Json form GeoServer

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

Tool make style SLD for GeoServer
Tool make style SLD for GeoServer

Hi vọng giúp được một số nhỏ mọi người^^

-soiqualang-chentreu-