【问题标题】:Update object properties更新对象属性
【发布时间】:2013-01-18 17:17:55
【问题描述】:

我正在使用 Struts 2,我的问题是我不想更新我的所有对象属性,因为我得到了一些敏感数据。

这是我的代码示例

public class person {
  private name;
  private email;
  private password;
}

例如,在我的表单中,我显示了更新的姓名和电子邮件,所以当我在提交后更新我的人员属性时,人员的密码属性获取值为 null,但是当我将属性密码放入 <s:hidden>更新工作正常的表单中的标记。

如何让Struts 2在不使用表单隐藏标签的情况下记住密码的值?

【问题讨论】:

    标签: java security struts2 passwords password-storage


    【解决方案1】:

    如果您需要存储信息,

    • 必须在请求中保持不变;
    • 不得在页面中显示;

    那么你必须use the Session,通过实现SessionAware


    也就是说,我不确定您是否应该存储用户密码,也不应该将密码与用户关联;

    您应该在您的 Web 应用程序中创建一个登录页面,仅在该操作中处理密码,根据数据库(或其他)验证它,并在会话中存储一些身份验证 ID,而不是密码本身(您不会再次验证用户,除非会话过期,否则用户将被重定向到登录页面...无需将密码保存在内存中。


    也就是说,用户身份验证的最佳实践不鼓励根据数据库中存储的密码来验证输入的密码;

    您应该使用某种单向hashing algorithmadding a salt 以防止Rainbow Tables 攻击)对密码进行哈希处理,并根据数据库上的哈希密码对其进行检查。这样,即使是数据库管理员也无法知道用户的密码,一旦忘记密码,将被重置,而不是找回。

    在 Java 中,最好的实现之一是 jBCrypt,基于 BCrypt

    希望对您有所帮助...


    编辑

    作为一种在概念上分离您在 Web 应用程序中处理的对象的方法,您可以使用两个不同的 bean:一个用于读取的“完整 Bean”,具有所有属性,一个用于写入的“子集 Bean”,仅包含可能改变的属性。

    例如,ID 和密码不应更改...您可以从数据库中读取“完整”,然后写入 JSP,然后写入数据库中的“子集”(除了在用户注册中,您将在其中写入满)...

    为了更容易理解,Full Bean 是精确映射数据库字段的Dao 对象,而 Subset Bean 是Presentation 对象,您将通过仅从 Dao 对象中复制所需的属性来创建它。 .. 它们都是 DTO,但具有两个不同级别的语义。

    要不然把你的bean放到session里,就是一行代码,你就ok了。

    【讨论】:

    • 感谢您的回复,我已经使用了哈希算法和盐,我的问题是如何在更新后保持属性值而不是 null,而不使用会话,因为在我的课堂上我有很多属性我不想用于更新表单
    • 您可以使用两种不同的 bean:一个“Full Bean”用于读取,包含所有属性,一个“Subset Bean”用于写入,仅包含可以更改的属性。例如,ID 和密码不应该改变......您可以从数据库中读取“完整”,然后写入 JSP,然后写入数据库“子集”(除了在用户注册中,您将在其中写入完整)。 ..否则只需将您的bean放入会话中,这是一行代码,您会没事的。
    • 感谢您的解释,我想我会做的。您应该发表评论作为答案。
    【解决方案2】:

    您可以在服务器端检查“null”(或唯一值)值(如果为null,则表示:没有变化。)。 或者您可以将此类用于更新请求

    Public class person
    {
    
      protected name;
      protected email;
    }
    Public class personNew: person // inherit from person
    {
        private password;
    }
    

    我不使用“Struts 2”,而是在我的 Web 应用程序(APS.NET C#)中。我走这条路

    【讨论】:

      猜你喜欢
      • 2020-07-16
      • 2012-03-16
      • 2016-07-13
      • 2016-09-13
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多