Лично я хотел бы сделать это в модели User
. У меня есть добытчики для своих полей, так что в setPassword
методы:
this.password = HashHelper.createPassword(password);
Hashhelper
это просто синглтон класс для нескольких целей хеширования вещей.
И в Hashelper я использую Bcrypt, просто добавьте следующее Build.scala
org.mindrot" % "jbcrypt" % "0.3m
И криптовальную выглядит следующим образом:
/**
* Create an encrypted password from a clear string.
*
* @param clearString
* the clear string
* @return an encrypted password of the clear string
* @throws AppException
* APP Exception, from NoSuchAlgorithmException
*/
public static String createPassword(String clearString) throws AppException {
if (clearString == null) {
throw new AppException("empty.password");
}
return BCrypt.hashpw(clearString, BCrypt.gensalt());
}
и дешифрования выглядит следующим образом:
/**
* Method to check if entered user password is the same as the one that is
* stored (encrypted) in the database.
*
* @param candidate
* the clear text
* @param encryptedPassword
* the encrypted password string to check.
* @return true if the candidate matches, false otherwise.
*/
public static boolean checkPassword(String candidate, String encryptedPassword) {
if (candidate == null) {
return false;
}
if (encryptedPassword == null) {
return false;
}
return BCrypt.checkpw(candidate, encryptedPassword);
}
Мне нравится держать мои контроллеры как можно более простыми, так как я вижу контроллеры так же, как контроллеры трафика между пользовательское действие и бизнес-модель (внутри моих моделей!).
Я использую [jBCrypt] (http://mvnrepository.com/artifact/org.mindrot/jbcrypt/0.3m), который очень легко интегрировать в ваше приложение. – maba
спасибо, но я действительно спрашиваю, где назвать функцию хэширования. в модели или в контроллере? и как? – zeal
моей главной проблемой является то, что я не могу использовать '@ PreUpdate' и' @ Prepersist' в ebean. – zeal