Geoserver的跨域问题
我们通常需要通过ajax跨域访问GIS服务,GeoServer默认是不支持跨域的,通常直接访问浏览器会报类似:XMLHttpRequest 、not allowed by Access-Control-Allow-Origin的错误提示。
跨域原因
同源策略:为了保证浏览器安全,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。同源是请求地址中的协议、域名、端口都相同。 同源策略是浏览器安全的基石。
解决方案
- 取消浏览器检验。
- 不使用XHR(XMLHttpRequest)请求类型(JSONP)。
- 被调用方在请求头里添加相关参数(CORS)支持跨域。
- 调用方使用反向代理,将请求在调用方的http服务器发送。或者在应用服务器中发生和接受并处理返回。。
下面主要介绍Geoserver跨域配置通过filter方案实现跨域资源的访问。
- 下载平台独立二进制(捆绑在Jetty中的GeoServer Web应用程序),将【geoserverPath】\lib中的jetty-servlets-9.4.12.v20180830.jar和jetty-util-9.4.12.v20180830.jar。geoservePath为geoserver的安装目录。
- 将俩个jar包复制到【geoserverPath】\webapps\geoserver\WEB-INF\lib
- 修改【geoserverPath】\webapps\geoserver\WEB-INF目录下web.xml文件,将下列的注释取消
# Uncomment following filter to enable CORS
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>chainPreflight</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>GET,POST,PUT,DELETE,HEAD,OPTIONS</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>*</param-value>
</init-param>
</filter>
# Uncomment following filter to enable CORS
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 重启服务。
注意:在安装包找不到\lib中的jetty-servlets-9.4.12.v20180830.jar,jetty-servlets包下载对应的版本。这里要下载与geoserver版本对应版本。点击这里。
找到对应的版本
版权声明:
作者:Gomo
链接:https://www.develophm.com/index.php/geoserver%e7%9a%84%e8%b7%a8%e5%9f%9f%e9%97%ae%e9%a2%98/991/
来源:开发之家
文章版权归作者所有,未经允许请勿转载。
THE END
二维码
共有 1 条评论