Spring Security-переключение между поставщиками аутентификации во время выполнения (локальная база данных или удаленный LDAP)



Im в настоящее время работает с веб-приложением Spring MVC, и мы используем аутентификацию через локальную базу данных с impl класса AbstractUserDetailsAuthenticationprovider, предоставляемого spring security.



Однако для дальнейшей защиты приложения мы решили разрешить пользователям аутентификацию через LDAP / AD server. Это не было бы обязательным требованием, и пользователи могут включить его в конфигурациях самого портала.



Интересно, как бы он на самом деле пошел вокруг реализации этого. НашлиAbstractLdapAuthenticationProvider . Однако просто добавить этот дополнительный поставщик проверки подлинности в диспетчер проверки подлинности будет недостаточно, так как погода или нет должна быть определена во время выполнения флагом в базе данных.



Был бы очень признателен за любую помощь в этой области.



Спасибо за чтение:)

537   2  

2 ответов:

Существует, вероятно, несколько способов сделать это, но простой подход состоял бы в том, чтобы иметь два поставщика аутентификации к менеджеру аутентификации, поставщик аутентификации для локальной базы данных во-первых, поставщик аутентификации LDAP во-вторых.

Чтобы пропустить проверку LDAP во время выполнения, бросьте AccountStatusException (его подкласс, так как абстрактный) от вашего локального поставщика базы данных. Это заставляет диспетчер аутентификации пропускать других поставщиков, в вашем случае LDAP.

Если вы хотите наоборот для a пользователь, установите пароль пустым или случайным значением в локальной базе данных.

Есть два поставщика аутентификации, один для локальной базы данных и один для LDAP. Диспетчер проверки подлинности Spring вызовет метод public boolean supports(Class authentication) в каждом из поставщиков, чтобы проверить, поддерживает ли поставщик предоставленный класс проверки подлинности. Таким образом, метод supports(Class authentication) является идеальным местом для написания собственной пользовательской логики для включения/выключения конкретного поставщика аутентификации.

Comments

    Ничего не найдено.