Я могу придумать два способа сделать это. @ ray-tayek предполагал, что пароль хранится как поле класса Домена, но это не будет достаточно частным: пароль будет отправлен по сети (будь то интрасеть или Интернет) в виде простого текста и будет сохранен в база данных таким же образом. Однако первое неверно, если вы используете HTTPS, поэтому (вместо использования пользовательского валидатора) вы можете использовать ограничения matches
, которые принимают регулярное выражение (непроверенное):
class User {
String username
String password
static constraints = {
username blank: false // whatever
password minLenght: 8, matches: /^[\d\p{L}]*$/ // Digits or any kind of letter
}
}
В любом случае, я хотел бы проверить клиентскую часть пароля с помощью JavaScript, когда он правильно вычислит хеш, такой как SHA-1 , и отправит его на сервер. В этом случае все, что вам нужно проверить на стороне сервера, - это то, что хеш соответствует строке SHA-1, что может быть легко сделано:
static constraints = {
// ...
passwordHash matches: /^\b[0-9a-f]{5,40}\b$/
}
Таким образом, когда пользователь пытается войти в систему, вы должны проверять сохраненные и отправленные хэши друг против друга, вместо использования простых паролей.