我正在使用Struts 2,我的问题是我不想更新所有对象属性,因为我得到了一些敏感数据.
这是我的代码示例
public class person {
private name;
private email;
private password;
}
例如,在我的表单中,我会显示要更新的名称和电子邮件,因此,在提交后更新我的人员属性时,该人员的password属性将获得值null,但是将属性密码放入< s:hidden>中.标记形式的更新工作正常.
如何使Struts 2在不使用表单中的隐藏标签的情况下记住密码的值?
解决方法:
如果您需要存储信息
>必须在请求中保持不变;
>不得显示在页面中;
然后必须通过实现SessionAware达到use the Session:
就是说,我不确定您是否应该存储用户密码,也不要将密码与用户关联;
您应该在Web应用程序中创建一个登录页面,仅在该Action中处理密码,针对数据库(或其他方式)对其进行验证,并在Session中存储一些身份验证ID,而不是密码本身(您不会验证用户的身份)再次,除非会话终止,否则用户将被重定向到登录页面……无需将密码保存在内存中.
也就是说,用户身份验证的最佳做法也不利于对照数据库中存储的密码来验证输入的密码.
您应该使用某种单向方式hashing algorithm(防止彩虹表攻击的adding a salt)对密码进行哈希处理,并对照数据库上的哈希密码进行检查.这样,即使数据库管理员也无法知道用户的密码,并且在忘记密码的情况下,密码将被重置而不被检索.
在Java中,最好的实现之一是基于BCrypt的jBCrypt.
希望有帮助…
编辑
为了从概念上分离在Web应用程序中处理的对象,可以使用两种不同的bean:“ Full Bean”用于读取,具有所有属性,而“ Subset Bean”用于写入,仅包含可以更改.
例如,ID和密码不应更改…您可以从数据库中读取“完整”,然后写入JSP,然后写入数据库中的“子集”(除了用户注册外,您将在其中写入完整内容). ..
为了使它更容易理解,Full Bean是精确映射数据库字段的Dao对象,而Subset Bean是仅通过复制Dao对象中所需的属性而创建的Presentation Object,它们都是DTO. ,但具有两个不同级别的语义.
否则,只需将您的bean放入会话中,它就是一行代码,您就可以了.