为什么primefaces p:密码在页面刷新时丢失其值

时间:2014-04-11 07:04:02

标签: jsf primefaces

在我的项目中,我使用的是primefaces p:password component。除了一件事,一切正常,当我刷新页面时它失去了它的价值。任何人都可以告诉它背后的安全原因。

谢谢朋友们。

1 个答案:

答案 0 :(得分:6)

假设密码字段包含敏感数据,因此无法在页面重新加载时再次显示。
原因是敏感数据通常不会被浏览器缓存(取决于您的设置),因此在请求被触发后不可用。这意味着您的密码输入在任何时候都不会成为您网页的一部分,但只能提交到其随附的表单中。

initial page-load:
<p:password .../>  |-- rendered to --> <input type="secret" value="" />
after page-reload:
<p:password .../>  |-- rendered to --> <input type="secret" value="" />

正如您所看到的,渲染的html输出的属性为空,当您输入密码时,它只发生在客户端,当提交表单时,值为发送到服务器并清除客户端输入。

要为多个请求保持输入持久性,只需将redisplay组件的p:password属性设置为 true

initial page-load:
<p:password redisplay="true" .../> |-- rendered to --> <input type="secret" value="" />
after page-reload:
<p:password redisplay="true" .../> |-- rendered to --> <input type="secret" value="inputPW" />

请注意,使用set redisplay="true"重新加载后,提交的密码将成为html-dom的一部分,对于来自html-source的任何攻击者来说轻松可读!

希望这有帮助!玩得开心!