找到的OpenLayers跨域访问WFS服务出现No 'Access

php中文网
发布: 2016-06-07 15:49:59
原创
1607人浏览过

在eclipse中部署了一个使用OpenLayers的Java web项目CrossDomainTest,容器为Tomcat 7.0.56.(http://localhost:8080/CrossDomainTest/index.html) 利用Geoserver 2.5.2使用内置容器jetty 6.18发布WFS服务.(http://localhost:8888/geoserver/wfs). 从localh

           在eclipse中部署了一个使用openlayers的java web项目crossdomaintest,容器为tomcat 7.0.56.(http://localhost:8080/crossdomaintest/index.html)

    利用Geoserver 2.5.2使用内置容器jetty 6.18发布WFS服务.(http://localhost:8888/geoserver/wfs).

    从localhost:8080访问localhost:8888的WFS无法得到预期效果,通过chrome浏览器开发者工具发现错误:No 'Access-Control-Allow-Origin' header is present on the requested resource. 查阅发现是所谓的Javascript安全性导致的“跨域问题”,找了很多的解决方法,比如设置cgi代理,CORS(跨域资源共享)等我都尝试了但不知为何没有成功,限于时间关系没有仔细追究,最后找到[Geoserver-users] CORS for jetty 6.1.8 (Geoserver 2.x), solved这篇文章,按其设置解决了问题:

MacsMind
MacsMind

电商AI超级智能客服

MacsMind 192
查看详情 MacsMind
<span>解决方案步骤为:</span>
登录后复制
<span>1.从这里下载ZIP文件,解压后放到</span><span><Geoserver>\webapps\geoserver\WEB-INF\classes文件夹中。</span>
登录后复制
<span>2.向</span><span><Geoserver>\webapps\geoserver\WEB-INF\文件夹中的web.xml文件中增加如下配置文件允许所有域的跨域资源共享</span><pre class="brush:php;toolbar:false;"> <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-name>cross-origin</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
登录后复制

重启GeoServer,稍等片刻跨域访问就成功了,祝好运。原文主要内容如下:
的方法解决了问题。原文内容为
<span>I was looking on Geoserver cross domain support (no-proxy) recently and I
managed to get it working by compiling custom filter for Jetty 6.1.8. The
filter is based on CrossOriginFilter which is supplied with newer versions
of jetty-servlets.jar. I have fixed some white-space bugs and tested it
with OpenLayers 2.12, IE, FF and Chrome.

You can follow the same rules as described here:
http://wiki.eclipse.org/Jetty/Feature/Cross_Origin_Filter but:

1.Do not include the jar. Instead, put content of this archive
http://shanbe.hezoun.com/cors.zip into the
<Geoserver>\webapps\geoserver\WEB-INF\classes folder.
2. use <filter-class>org.mortbay.servlets.CrossOriginFilter</filter-class>
 insteand of
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
3. do not use additional spaces in allowedHeaders defs (like this:
"x-request-with, content-type")

You can put follwing conf. inside the <Geoserver>\webapps\geoserver\web.xml
to allow CORS requests from all domains:

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

..restart the geoserver and it should work.</span>
登录后复制
登录后复制
相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号