Как использовать @Size проверку достоверности для паролей, которые хэшируются автоматически - PullRequest
0 голосов
/ 01 ноября 2018

Я использую Spring с Hibernate для взаимодействия с моей базой данных. Я использую JPA / Hibernate для проверки правильности ввода. Но похоже, что это не работает для паролей, и я думаю, это потому, что метод setPassword() класса User автоматически хеширует пароль. Вот некоторый код:

class User {

    @Size(min = 12, max = 100)
    private String password;

    public User(..., String password) {
        this.passwordSeed = this.passwordSeed = DigestUtils.sha256Hex(random.generateSeed(32));
        this.password = DigestUtils.sha256Hex(password + this.passwordSeed);
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        if (passwordSeed == null) {
            this.passwordSeed = DigestUtils.sha256Hex(random.generateSeed(32));
        }
        this.password = DigestUtils.sha256Hex(password + this.passwordSeed);
    }
}

Обратите внимание, что я много урезал код, чтобы иметь возможность сосредоточиться на основной части. ... в конструкторе - это мой способ сказать, что у него гораздо больше аргументов для установки других свойств, таких как firstName и т. Д.

Таким образом, проблема в том, что ограничение @Size не выдает исключение, когда пользователь вводит, например, однобуквенный пароль. Например, @Size работает для firstName.

Я пытался добавить ограничение к переменной метода, но это тоже не работает. Как это:

class User {


    private String password;

    public User(..., @Size(min = 12, max = 100) String password) {
        this.passwordSeed = this.passwordSeed = DigestUtils.sha256Hex(random.generateSeed(32));
        this.password = DigestUtils.sha256Hex(password + this.passwordSeed);
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(@Size(min = 12, max = 100) String password) {
        if (passwordSeed == null) {
            this.passwordSeed = DigestUtils.sha256Hex(random.generateSeed(32));
        }
        this.password = DigestUtils.sha256Hex(password + this.passwordSeed);
    }
}

Обратите внимание, что вне модели хеширование или манипулирование паролем не производится.

Так как мне правильно подойти к этому, чтобы иметь простую проверку, которая проверяет минимальную длину 12 символов и максимальную 100 символов?

...