Java Spring哈希并验证密码

时间:2017-10-31 15:11:42

标签: java spring jpa

我把头发拉过来。我有一个像这样的简单用户实体

@Entity
public class User {
  private static final PasswordEncoder pwEncoder = new BCryptPasswordEncoder();

  @Id 
  @GeneratedValue 
  private long id;

  @NotNull(message = "FIELD_IS_NULL")
  @NotEmpty(message = "FIELD_IS_REQUIRED")
  @Length(min = 3, message = "FIELD_MUST_HAVE_AT_LEAST_3_CHARACTERS")
  private String username;

  @NotNull(message = "FIELD_IS_NULL")
  @NotEmpty(message = "FIELD_IS_REQUIRED")
  @Length(min = 6, message = "FIELD_MUST_HAVE_AT_LEAST_6_CHARACTERS")
  @Pattern(regexp = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{6,128}$", message="PW_MIN_6_MAX_128_1_UPPER_1_LOWER_1_NUMERIC")
  private String password;

  public User(String username, String password){
    this.username = username;
    this.password = pwEncoder.encode(password);
  }

  /* getters and setters */
}

除了密码哈希在任何验证之前发生之外,这种方式正常,这意味着哈希密码已经过验证,而不是未哈希的。

我正在使用PagingAndSortingRepository来满足我的所有存储库需求,我真的想避免为这种情况实现控制器。

我觉得我错过了一些非常棒的东西......

1 个答案:

答案 0 :(得分:4)

如果您使用此构造函数

public User(String username, String password){
    this.username = username;
    this.password = pwEncoder.encode(password);
}

您将使用编码密码而不是原始值

你可以像这样制作@PrePersist方法:

@PrePersist
public void prePersist(){
    password = pwEncoder.encode(password);
}