2017-10-31 17 views
4

私はこれで私の髪を引っ張っています。私は持っている。これは、パスワードハッシュは、ハッシュされたパスワードではなくハッシュ解除済みの検証されたことを意味の前に任意の検証を、起こることを除いて正常に動作します。このJava Springハッシュとパスワードの検証

@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

これは暗号化ではなく、ハッシングです。ハッシュを比較することになっているので、元のパスワードを平文で保存しないでください。ハッシュに検証を適用しないでください。意味がありません。 – jonrsharpe

+0

もちろん、あなたはハッシュ対暗号化について正しいです。しかし、ハッシュではなくパスワードに検証を適用するにはどうすればよいですか? – Fabian

+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); 
} 
関連する問題