jsf.js由于X-Frame-Options标头而无法呈现

时间:2019-05-25 01:59:01

标签: jsf

我的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如何克服这种情况?

This似乎是一个不同的问题,或者至少似乎有一个不同的解决方案。


在我最近的测试中,似乎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()
        }
    },

我还不清楚为什么这会触发该块,因为脚本与应用程序的其余部分来自同一来源。

0 个答案:

没有答案