Вопрос о плагине Grails spring-security-core: пароль в классе User не является строкой - PullRequest
0 голосов
/ 24 февраля 2011

Я работаю над приложением, которое хранит пароль в виде байта [] в БД. Я не могу изменить БД. Итак, мой класс домена имеет следующее:

String userId
byte[] userPasswd

Я знаю, что могу настроить имена свойств в Config.groovy, но как насчет использования byte [] вместо типа данных String для свойства пароля? В случае, если это в настоящее время не поддерживается в плагине, обходной путь будет высоко оценен.

1 Ответ

1 голос
/ 24 февраля 2011

Есть несколько способов, но это кажется самым чистым и не требует изменений Config.groovy.

Измените свойство постоянного пароля на другое имя, как вы сделали (userPasswd), но вставьте получатель для getPassword (), который будет использовать плагин, и преобразуйте байтовый массив в строку:

class User {

   String username
   byte[] userPasswd
   boolean enabled
   boolean accountExpired
   boolean accountLocked
   boolean passwordExpired

   static constraints = {
      username blank: false, unique: true
      password blank: false
   }

   static transients = ['password']

   String getPassword() {
      userPasswd ? new String(userPasswd) : null
   }

   Set<Role> getAuthorities() {
      UserRole.findAllByUser(this).collect { it.role } as Set
   }
}

Добавление «пароля» в список переходных процессов важно, поскольку реальным постоянным полем является userPasswd.

Это повлияет на то, как вы создаете пользователей, например,

def user = new User(username: 'me', enabled: true,
   passwd: springSecurityService.encodePassword('password').bytes).save()
...