X-Frame-Options для SAMEORIGIN в Geoserver предотвращает просмотр моего iframe - PullRequest
0 голосов
/ 28 января 2019

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 заблокирован, X-Frame-Options для SAMEORIGIN является ошибкой.Кто-нибудь знает, как мне этого избежать?

В документации Geoserver есть решение, но то, как я его применил, никак не повлияло на приложение.https://docs.geoserver.org/latest/en/user/production/config.html

Это моя строка exec в start.sh, в которой для политики должно быть установлено значение false.

1 Ответ

0 голосов
/ 29 января 2019

Это легко исправить, следуя рекомендациям в GeoServer документах .

Вам необходимо установить для переменной geoserver.xframe.shouldSetPolicy значение false, чтобы отключить запрет X-Frame, или geoserver.xframe.policy для «ALLOW-FROM [uri]», где uri - это местоположение вашего iFrame.

  1. добавить его в файл web.xml:


    geoserver.xframe.policy
    РАЗРЕШИТЬ ОТ http://example.com

  2. добавьте его в строку CATALINA_OPTS или exec в startup.sh или startup.bat, используя форму -D.

    -Dgeoserver.xframe.shouldSetPolicy = false

  3. добавить его в качестве системной переменной (для пользователя, выполняющего tomcat или jetty).

    export geoserver.xframe.shouldSetPolicy = false set geoserver.xframe.shouldSetPolicy = false

Затем можно легко проверить, что это работает, запустив простой запрос curl:

Сначала с не указанным выше:

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

Затем с установленной политикой:

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

и, наконец, с выключенным 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
< Set-Cookie: JSESSIONID=node01pdyu4npf3xt6130w8gehjai7t0.node0;Path=/geoserver
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Location: http://localhost:8085/geoserver/web/;jsessionid=node01pdyu4npf3xt6130w8gehjai7t0.node0
< Content-Length: 0
< Server: Jetty(9.4.12.v20180830)
< 
* Connection #0 to host localhost left intact
...