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

use*_*988 2 jsf primefaces

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

谢谢朋友.

Sim*_*Sez 7

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

initial page-load:
<p:password .../>  |-- rendered to --> <input type="secret" value="" />
after page-reload:
<p:password .../>  |-- rendered to --> <input type="secret" value="" />
Run Code Online (Sandbox Code Playgroud)

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

要使输入对多个请求保持持久,只需将组件的redisplay属性设置p:passwordtrue.

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" />
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助!玩得开心!