我把头发拉过来。我有一个像这样的简单用户实体
@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
来满足我的所有存储库需求,我真的想避免为这种情况实现控制器。
我觉得我错过了一些非常棒的东西......
答案 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);
}