Я хотел использовать MongoDB в своем приложении Grails, а также Spring Security. Я создал как пользовательские, так и ролевые классы с помощью команды s2-quickstart
. Я добавил свойство id
ко всем моим классам типа ObjectId
, как он говорит во многих блогах.Использование Spring Security вместе с MongoDB
Это делает работу, но один метод беспокоит меня немного:
// SecUser.groovy (generated by s2-quickstart)
def beforeUpdate() {
if (this.isDirty('password')) {
encodePassword()
}
}
isDirty()
метод, кажется, отсутствует в среде MongoDB. Он отлично работает с использованием Hibernate. Это ошибка, зарегистрированная под http://jira.grails.org/browse/GPMONGODB-114
Есть ли способ обойти этот метод? Насколько я понимаю, он проверяет, был ли пароль изменен, а затем снова закодирует его.
Нельзя ли это сделать вручную? Например, если у меня есть профиль пользователя , в котором есть поле пароля, я просто закодирую его снова при сохранении?
Я бы очень хотел использовать как Spring Security, так и MongoDB вместе, и я уверен, что этот метод не остановит меня. ;)
Что такое 'UserDetailsService'? Я видел этот класс в примере приложения на GitHub, но он не был сгенерирован. Это просто хорошая вещь? В настоящее время я не вижу никаких преимуществ при использовании. Я просто выбросил методы 'before ...()' и создал новый объект 'User' и установил пароль соленых/хэшированных« вручную », а не сам объект« Пользователь ». Работает как шарм. Я думаю, что многое можно сделать с помощью плагина Grails или самой Spring Security, которая не обязательно должна быть явно настроена. –
Наконец, ваш ответ был правильным, так как реализация хэширования паролей при каждом сохранении или обновлении пользователя - единственный способ пойти с Grails и MongoDB, так как 'isDirty()' поддерживается только в Hibernate. Не сильно больно, хотя –