Spring Security AuthenticationManager vs AuthenticationProvider? - PullRequest
49 голосов
/ 24 февраля 2010

Может кто-нибудь сказать мне разницу между AuthenticationManager и AuthenticationProvider в Spring Security?

Как они используются и как они называются. Насколько я понимаю, SecurityFilter будет вызывать AuthenticationManager для аутентификации Authentication объекта? Но тогда когда в игру вступает AuthenticationProvider?

Спасибо!

Ответы [ 2 ]

32 голосов
/ 25 февраля 2010

Я думаю, AuthenticationManager делегирует извлечение постоянной пользовательской информации одному или нескольким AuthenticationProvider с. Поставщики аутентификации (например, DaoAuthenticationProvider, JaasAuthenticationProvider, LdapAuthenticationProvider, OpenIDAuthenticationProvider) специализируются на доступе к определенным хранилищам информации о пользователях. Что-то еще упоминается в этой части справочного руководства. Там написано:

Возможно, вы захотите зарегистрировать дополнительные компоненты AuthenticationProvider с помощью ProviderManager, и вы можете сделать это, используя элемент с атрибутом ref, где значение атрибута - это имя компонента поставщика, который вы хотите добавить. *

Другими словами, вы можете указать несколько AuthenticationProviders, например, один, который ищет пользователей в базе данных LDAP, и другой, который ищет в базе данных SQL.

8 голосов
/ 20 февраля 2017

с весны ссылка

AuthenticationManager - это просто интерфейс, поэтому реализация может быть любой, что мы выберем

Реализация по умолчанию в Spring Security называется ProviderManager, и вместо того, чтобы обрабатывать сам запрос аутентификации, она делегирует список сконфигурированных AuthenticationProvider, каждый из которых запрашивается по очереди, чтобы узнать, может ли он выполнить аутентификацию. Каждый провайдер генерирует исключение или возвращает полностью заполненный объект аутентификации.

Также, если вы проверите исходный код для AuthenticationManager, ProviderManager и AuthenticationProvider, вы можете увидеть это ясно.

ProviderManager реализует интерфейс AuthenticationManager и имеет список AuthenticationProviders. Поэтому, если вы хотите иметь собственный механизм аутентификации, вам нужно реализовать новый AuthenticationProvider.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...