Я думаю, что AuthenticationManager
делегирует выборку постоянной информации пользователя одному или нескольким AuthenticationProvider
. Поставщики аутентификации (например, DaoAuthenticationProvider, JaasAuthenticationProvider, LdapAuthenticationProvider, OpenIDAuthenticationProvider
) специализируются на доступе к конкретным репозиториям пользовательской информации. Что-то еще упоминается в справочнике this part. В нем написано:
Возможно, вы захотите зарегистрировать дополнительные компоненты AuthenticationProvider с ProviderManager, и вы можете сделать это, используя элемент с атрибутом ref, где значение атрибута - это имя компонента поставщика, который вы хотите добавить.
Другими словами, вы можете указать несколько AuthenticationProviders, например, тот, который ищет пользователей в базе данных LDAP, а другой - в базе данных SQL.
Итак, вы бы очень редко нуждались в реализации AuthenticationManager, но вместо этого вы бы просто использовали AuthenticationProviders для получения сведений о пользователе из любого места, откуда вы хотите их получить? –
Большинство пользователей AuthenticationProviders, которые вам могут понадобиться, уже были написаны ребятами, которые пишут Spring Security, и находятся прямо в документации API, поэтому вы можете их настроить. Если вам нужно еще не в каркасе, вероятно, тривиально реализовать интерфейс AuthenticationProvider для ваших целей. –
Как сказал Ханс, В Sprint Security класс ProviderManager представляет собой реализацию AuthenticationManager, которая вызывает метод аутентификации AuthenticationProvider. Подпись метода этого менеджера-провайдера: org.springframework.security.providers.ProviderManager.doAuthentication (Authentication) – Rajesh