Использование Spring Security вместе с MongoDB - PullRequest
2 голосов
/ 07 марта 2012

Я хотел использовать MongoDB в своем приложении Grails, а также Spring Security.Я сгенерировал классы User и Role с помощью команды s2-quickstart.Я добавил свойство id ко всем моим классам типа ObjectId, как говорится во многих статьях блога.

Это работает, но один метод меня немного беспокоит:

    // 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 вместеи я уверен, что этот метод не остановит меня.;)

1 Ответ

1 голос
/ 08 марта 2012

Я не вижу причин, по которым вы не можете создать свой собственный UserDetailsService, который загружает хэшированный пароль из Mongo, а затем использует PasswordEncoder в вашем AuthenitcationManager. Это скажет Spring хэшировать пароль, введенный пользователем, прежде чем сравнивать его со значением, полученным из mongo.

Я не могу комментировать аспект Grails, но мы используем безопасность Spring и хэшируем пароли с Mongo. На самом деле у нас есть собственный кодировщик паролей, который использует итеративный хеш / соль, поэтому я уверен, что то, что вы хотите, возможно:)

...