2010-02-24 4 views
38

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

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

Спасибо!

ответ

25

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

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

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

+0

Итак, вы бы очень редко нуждались в реализации AuthenticationManager, но вместо этого вы бы просто использовали AuthenticationProviders для получения сведений о пользователе из любого места, откуда вы хотите их получить? –

+0

Большинство пользователей AuthenticationProviders, которые вам могут понадобиться, уже были написаны ребятами, которые пишут Spring Security, и находятся прямо в документации API, поэтому вы можете их настроить. Если вам нужно еще не в каркасе, вероятно, тривиально реализовать интерфейс AuthenticationProvider для ваших целей. –

+0

Как сказал Ханс, В Sprint Security класс ProviderManager представляет собой реализацию AuthenticationManager, которая вызывает метод аутентификации AuthenticationProvider. Подпись метода этого менеджера-провайдера: org.springframework.security.providers.ProviderManager.doAuthentication (Authentication) – Rajesh

3

С весны reference

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

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

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

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

Смежные вопросы