Подтвердить что ты не робот

Spring безопасность AuthenticationManager vs AuthenticationProvider?

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

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

Спасибо!

4b9b3361

Ответ 1

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

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

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

Ответ 2

Из spring reference

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

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

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

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