启用 cookie HTTPOnly 时,Primefaces monitorDownload 停止不起作用

Primefaces monitorDownload stop doesn't work when cookies HTTPOnly is enabled

我正在使用 Primefaces 11.0.0 我有一个下载文件组件如下:

<p:commandButton 
    onclick="PrimeFaces.monitorDownload(startDownload, stopDownload);"
    ajax="false"
    icon="fa fa-download">
    <p:fileDownload value="#{downloadBean.getDownloadFile(document.id)}"/>
</p:commandButton>

我的应用程序在 tomcat 上 运行 落后于 Nginx 我们有一个安全建议,将 HTTPOnly,Secure 添加到我们的 cookie 所以在 Nginx 上配置 HTTPOnly 到 cookie 时 永远不会调用 stopDownload。

我的Nginx配置如下:

location /myapp {
            proxy_pass http://localhost:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_cookie_path /myapp "/myapp; HTTPOnly; Secure";
        }

如何使 stopDownload 与 HTTPOnly 一起工作?

编辑:

我能够通过将 HTTPOnly 设置为重要的会话 cookie 来使其工作,如下所示:

proxy_cookie_flags ~ Secure;
proxy_cookie_flags JSESSIONID HTTPOnly Secure;

这是最佳做法还是有更好的解决方案?

没错。

因为 Monitor Download 需要使用 JavaScript 访问 cookie 以“停止下载”,cookie 不能是 HTTP Only,这就是您的代码被破坏的原因。

您的 JSESSIONID cookie 完全正确,可以将其锁定。我认为您上面的配置是正确的。