jsf.js не может отобразиться из-за заголовка X-Frame-Options - PullRequest
0 голосов
/ 25 мая 2019

У меня проблема с моей страницей JSF.

TomEE загружает «заголовки безопасности» в web.xml, один из них - X-Frame-Options DENY.Моя страница JSF загружается правильно, но после того, как я использую кнопку (которая загружает изображение Part), я получаю следующую ошибку в консоли JS:

xx.xhtml?a=http%3A%2F%2F....8:1 Refused to display 'https://....xhtml' in a frame because it set 'X-Frame-Options' to 'deny'.
jsf.js.xhtml?ln=javax.faces:1 Uncaught DOMException: Blocked a frame with origin "https://...." from accessing a cross-origin frame.
    at FrameTransport.callback (https://..../javax.faces.resource/jsf.js.xhtml?ln=javax.faces:1:5045)
    at HTMLIFrameElement.<anonymous> (https://..../javax.faces.resource/jsf.js.xhtml?ln=javax.faces:1:5695)
callback @ jsf.js.xhtml?ln=javax.faces:1
(anonymous) @ jsf.js.xhtml?ln=javax.faces:1
load (async)
open @ jsf.js.xhtml?ln=javax.faces:1
AjaxEngine.req.sendRequest @ jsf.js.xhtml?ln=javax.faces:1
sendRequest @ jsf.js.xhtml?ln=javax.faces:1
request @ jsf.js.xhtml?ln=javax.faces:1
ab @ jsf.js.xhtml?ln=javax.faces:1
onchange @ .....xhtml?a=http%3A%2F%2F.....8:147

JS console

Изображение было загружено, если я обновлю всю страницу, я смогу увидеть новое изображение.Но это похоже на то, что после загрузки Ajax JSF-скрипт не может его отрендерить и выдает ошибку (возможно, он имеет какое-то отношение к тому, что изображение загружается из другого порта того же сервера, но нет фрейма или чего-то в этом роде, простоповторная визуализация изображения).

Удаление защитного заголовка будет работать, но, конечно, я не думаю, что это хорошая идея.Как JSF может преодолеть эту ситуацию?

Эта кажется другой проблемой или, по крайней мере, может иметь другое решение.


В моих недавних тестахкажется, что X-Frame-Options SAMEORIGIN может работать.Это правильный способ справиться с этим?


Очевидно, jsf.js использует frames для некоторой функциональности.Я не понимаю, почему:

    callback: function() {
        if (this.aborted) {
            return
        }
        var iFrameDoc;
        var docBody;
        try {
            var evt = {};
            iFrameDoc = this.frame.contentWindow.document || this.frame.contentDocument || this.frame.document;
            docBody = iFrameDoc.body || iFrameDoc.documentElement;
            this.responseText = docBody.innerHTML;
            this.responseXML = iFrameDoc.XMLDocument || iFrameDoc;
            this.status = 201;
            this.readyState = 4;
            this.onreadystatechange(evt)
        } finally {
            this.cleanupReqParams()
        }
    },

Мне также непонятно, почему это вызывает блок, так как скрипт приходит из того же источника, что и остальная часть приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...