Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新对象属性_Java_Security_Struts2_Passwords_Password Storage - Fatal编程技术网

Java 更新对象属性

Java 更新对象属性,java,security,struts2,passwords,password-storage,Java,Security,Struts2,Passwords,Password Storage,我使用的是Struts 2,我的问题是我不想更新所有的对象属性,因为我得到了一些敏感数据 下面是我的代码示例 public class person { private name; private email; private password; } 例如,在我的表单中,我会显示姓名和电子邮件以进行更新,因此,当我在提交后更新我的个人属性时,个人的password属性会得到null值,但当我将属性password放入表单中的标记中时,更新工作正常 如何让Struts 2在不使用表单

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

下面是我的代码示例

public class person {
  private name;
  private email;
  private password;
}
例如,在我的表单中,我会显示姓名和电子邮件以进行更新,因此,当我在提交后更新我的个人属性时,个人的password属性会得到null值,但当我将属性password放入表单中的
标记中时,更新工作正常

如何让Struts 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#)中使用。我这样做

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

Public class person
{

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

我不使用“Struts 2”,而是在我的Web应用程序(APS.NET C#)中使用。如果您需要存储那些

  • 必须在请求之间保持一致
  • 不得在页面中显示
然后,您必须通过实现
SessionAware


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

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


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

您应该使用一些单向(以防止彩虹表s攻击)对密码进行散列,并根据数据库上的散列密码进行检查。这样,即使是数据库管理员也无法知道用户的密码,如果忘记密码,它将被重设,而不会被检索

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

希望这有助于


编辑

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

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

为了便于理解,完整Bean是映射数据库字段的
Dao
对象,而子集Bean是一个
Presentation
对象,您只需从Dao对象复制所需的属性即可创建它……它们都是dto,但具有两个不同的语义级别


否则,只需将您的bean放入会话,它是一行代码,您就可以了。

如果您需要存储这些信息

  • 必须在请求之间保持一致
  • 不得在页面中显示
然后,您必须通过实现
SessionAware


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

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


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

您应该使用一些单向(以防止彩虹表s攻击)对密码进行散列,并根据数据库上的散列密码进行检查。这样,即使是数据库管理员也无法知道用户的密码,如果忘记密码,它将被重设,而不会被检索

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

希望这有助于


编辑

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

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

为了便于理解,完整Bean是映射数据库字段的
Dao
对象,而子集Bean是一个
Presentation
对象,您只需从Dao对象复制所需的属性即可创建它……它们都是dto,但具有两个不同的语义级别


否则,只需将您的bean放入会话,这是一行代码,您就可以了。

谢谢您的回复,我已经使用了哈希算法和salt,我的问题是如何在更新后保留属性值而不是空值,而不使用会话,因为在我的类中,我有很多属性不想用于更新表单,您可以se两个不同的Bean:一个“完整Bean”用于读取,包含所有属性,另一个“子集Bean”用于写入,仅包含可能更改的属性。例如,ID和密码不应更改…您可以从数据库读取“完整”,然后写入到t