Geoserver中SAMEORIGIN的X-Frame-Options阻止查看我的iframe

时间:2019-01-28 11:52:55

标签: javascript maps openlayers geoserver x-frame-options

exec "$_RUNJAVA" $JAVA_OPTS $MARLIN_ENABLER -DGEOSERVER_DATA_DIR="$GEOSERVER_DATA_DIR" -Dgeoserver.xframe.shouldSetPolicy=false -Djava.awt.headless=true -DSTOP.PORT=8079 -DSTOP.KEY=geoserver -jar start.jar 

我正在使用Geoserver开发地图应用程序来托管我的图层和数据。我的目标之一是,单击地图中的某个点时,将出现一个iframe,其中显示了有关同一点的一些信息。当我在应用程序上意识到该问题时,iframe被阻止,SAMEORIGIN的X-Frame-Options就是错误。有人知道如何避免吗?

Geoserver文档提供了解决方案,但是我的应用方式对应用程序没有影响。 https://docs.geoserver.org/latest/en/user/production/config.html

这是我在start.sh中的执行行,应将policy设置为false。

1 个答案:

答案 0 :(得分:1)

遵循GeoServer docs中的建议可以轻松解决此问题。

您需要将<ng-container *ngTemplateOutlet="valueTemplate ? valueTemplate : defaultTemplate; context: templateContext"> </ng-container> <ng-template #defaultTemplate> default thing to show </ng-template> 变量设置为false以关闭X-Frame拒绝功能,或者将geoserver.xframe.shouldSetPolicy设置为“ ALLOW-FROM [uri]”,其中uri是iFrame的位置。

  1. 将其添加到web.xml文件中:


          geoserver.xframe.policy
          ALLOW-FROM http://example.com
     

  2. 使用-D格式将其添加到geoserver.xframe.policystartup.sh中的CATALINA_OPTS或exec行中。

    -Dgeoserver.xframe.shouldSetPolicy = false

  3. 将其添加为系统变量(适用于运行tomcat或jetty的用户)。

    导出geoserver.xframe.shouldSetPolicy = false 设置geoserver.xframe.shouldSetPolicy = false

然后您可以通过运行一个简单的curl请求轻松地测试它是否正常工作:

首先满足上述条件之一

startup.bat

然后设置策略:

curl -v http://localhost:8080/geoserver/web
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /geoserver/web HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.58.0
> Accept: */*
> 
< HTTP/1.1 302 
< X-Frame-Options: SAMEORIGIN
< Set-Cookie: JSESSIONID=F844AFA320C4F711807759A2BEC96625.route1; Path=/geoserver; HttpOnly
< Location: /geoserver/web/;jsessionid=F844AFA320C4F711807759A2BEC96625.route1
< Content-Length: 0
< Date: Tue, 29 Jan 2019 11:15:49 GMT
< 
* Connection #0 to host localhost left intact

最后关闭XFrame:

curl -v http://localhost:8085/geoserver/web
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8085 (#0)
> GET /geoserver/web HTTP/1.1
> Host: localhost:8085
> User-Agent: curl/7.58.0
> Accept: */*
> 
< HTTP/1.1 302 Found
< X-Frame-Options: ALLOW-FROM http://example.com
< Set-Cookie: JSESSIONID=node010koqik22omjt1b1wbqewjrmcl0.node0;Path=/geoserver
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Location: http://localhost:8085/geoserver/web/;jsessionid=node010koqik22omjt1b1wbqewjrmcl0.node0
< Content-Length: 0
< Server: Jetty(9.4.12.v20180830)
< 
* Connection #0 to host localhost left intact