Я работаю над проектом Grails Legacy. Существует класс домена с именем User. Он содержит пароль, имя пользователя, роли и т. Д.
Этот проект использует Spring Security для управления ролями. Я хотел бы добавить срок действия учетных данных (заставить пользователя обновить свой пароль).
Я изменил класс User. Не он реализует интерфейс UserDetails .
Однако, когда я запускаю сервер, я получаю эту ошибку>
org.springframework.beans.factory.BeanCreationException:
Ошибка создания бина с именем
'messageSource': инициализация
боб не удался; вложенное исключение
org.springframework.beans.factory.BeanCreationException:
Ошибка создания бина с именем
'actionManager ': не удается разрешить
ссылка на bean-компонент 'sessionFactory'
при настройке свойства бина
'SessionFactory'; вложенное исключение
org.springframework.beans.factory.BeanCreationException:
Ошибка создания бина с именем
'sessionFactory': вызов init
метод не удался; вложенное исключение
org.hibernate.PropertyNotFoundException:
Не удалось найти установщик для свойства
accountNonExpired в классе
com.company.app.user.User
Должен ли я зарегистрировать боб? Я нахожу ошибку довольно запутанной, поскольку интерфейс не запрашивает метод установки.
обновление
После более подробного изучения я столкнулся с моим SecurityConfig.groovy, который выглядит LOT следующим образом ( AcegiSecurity Plugin * ):
security {
// see DefaultSecurityConfig.groovy for all settable/overridable properties
active = true
loginUserDomainClass = "User"
authorityDomainClass = "Role"
....
}
Мой класс User также выглядит A LOT следующим образом:
/**
* User domain class.
*/
class User {
static transients = ['pass','passwordExpired','credentialsNonExpired']
static hasMany = [authorities: Role]
static belongsTo = Role
/** Username */
String username
/** User Real Name*/
String userRealName
/** MD5 Password */
String passwd
/** enabled */
boolean enabled
String email
boolean emailShow
/** description */
String description = ''
/** plain password to create a MD5 password */
String pass = '[secret]'
static constraints = {
username(blank: false, unique: true)
userRealName(blank: false)
passwd(blank: false)
enabled()
}
public boolean isCredentialsNonExpired() {
return true;
}
}
Я добавил метод проверки истечения срока действия пароля для этого класса (isCredentialsNonExpired)
. Мне нужно, чтобы этот метод выполнялся при входе в систему. Прямо сейчас это не так.
Так что, похоже, я должен использовать подход Acegi. Какие-нибудь мысли? Я понимаю, что Acegi использует Spring Security, верно?