启用 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 完全正确,可以将其锁定。我认为您上面的配置是正确的。
我正在使用 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 完全正确,可以将其锁定。我认为您上面的配置是正确的。