Вопрос

Использование весенней безопасности у меня есть DaoAuthenticationProvider Описано как здесь:

http://static.springsource.org/spring-security/site/docs/2.0.x/reference/dao-provider.html.

У меня также есть кэширование (также, как оно описано в этой статье).

Проблема в том, что когда запрос приходит с хорошим именем пользователя (это уже в кэше), но плохой пароль - он возвращает пользователя из кэша, как будто это хорошее имя пользователя / пароль. Поскольку он использует имя пользователя в качестве ключа, пароль вообще не участвует.

Точный код, который возвращает пользователю из кэша:

UserDetails user = this.userCache.getUserFromCache(username);

Кто-нибудь когда-нибудь имел дело с этой проблемой раньше? Я также могу проверить, будет ли пароль одинаковым, но это будет таможенная вещь.

Спасибо.

Это было полезно?

Решение

Если вы настроили свое приложение со стандартными компонентами, сценарий должен быть следующим:

  1. При заправе пользователя приема Authentication Объект создается и заполняется именем пользователя и паролем, поставляемым пользователем.

  2. Пользовательские данные извлекаются: если это возможно, UserCache используется для извлечения ранее кэшированных деталей пользователей (т.е. getUserFromCache называется либо по реализациям UserDetailsService или AuthenticationProvider до призыв к AuthenticationManager выполняется). И это 100% хорошо, что детали пользователей из кэша будут приходить с хорошим паролем.

  3. После проведения основных проверок предварительной аутентификации (истечение учетных данных и т. Д.) Наступает фактическая аутентификация. В этот момент пароль из кэшированных пользовательских деталей по сравнению с паролем, хранящимся в Authentication Поставляемый объект (который в настоящее время содержит неправильный пароль). В этот момент попытка аутентификации не удается.

Однако, если вы реализуете твой собственный AuthenticationProvider или AuthenticationManager, Вы несете ответственность за проверку паролем.

Другие советы

Какой код изначально получает пользователя из БД и кэширует его? Проверяет ли это пароль? Похоже, у вас есть выпуск абстракции - Spring Security не должен знать, где пользователь исходит (дБ или кеш) и должен использовать одну и ту же логику в любом случае.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top