Spring Security-переключение между поставщиками аутентификации во время выполнения (локальная база данных или удаленный LDAP)
Im в настоящее время работает с веб-приложением Spring MVC, и мы используем аутентификацию через локальную базу данных с impl класса AbstractUserDetailsAuthenticationprovider, предоставляемого spring security.
Однако для дальнейшей защиты приложения мы решили разрешить пользователям аутентификацию через LDAP / AD server. Это не было бы обязательным требованием, и пользователи могут включить его в конфигурациях самого портала.
Интересно, как бы он на самом деле пошел вокруг реализации этого. НашлиAbstractLdapAuthenticationProvider . Однако просто добавить этот дополнительный поставщик проверки подлинности в диспетчер проверки подлинности будет недостаточно, так как погода или нет должна быть определена во время выполнения флагом в базе данных.
Был бы очень признателен за любую помощь в этой области.
Спасибо за чтение:)
2 ответов:
Существует, вероятно, несколько способов сделать это, но простой подход состоял бы в том, чтобы иметь два поставщика аутентификации к менеджеру аутентификации, поставщик аутентификации для локальной базы данных во-первых, поставщик аутентификации LDAP во-вторых.
Чтобы пропустить проверку LDAP во время выполнения, бросьте
AccountStatusException(его подкласс, так как абстрактный) от вашего локального поставщика базы данных. Это заставляет диспетчер аутентификации пропускать других поставщиков, в вашем случае LDAP.Если вы хотите наоборот для a пользователь, установите пароль пустым или случайным значением в локальной базе данных.
Есть два поставщика аутентификации, один для локальной базы данных и один для LDAP. Диспетчер проверки подлинности Spring вызовет метод
public boolean supports(Class authentication)в каждом из поставщиков, чтобы проверить, поддерживает ли поставщик предоставленный класс проверки подлинности. Таким образом, методsupports(Class authentication)является идеальным местом для написания собственной пользовательской логики для включения/выключения конкретного поставщика аутентификации.
Comments