Разные логины при переходе с разных URL - PullRequest
1 голос
/ 13 апреля 2011

У меня есть приложение, использующее настраиваемый менеджер аутентификации для входа в систему.Это просто поиск по таблице с именем Users.

<sec:authentication-manager alias="authenticationManager">
    <sec:authentication-provider user-service-ref="userDAOImpl">
        <sec:password-encoder hash="sha" />
    </sec:authentication-provider>
</sec:authentication-manager>

Проблема в том, что теперь мне нужно сделать еще один вход в систему, который должен искать в таблице "ExternalUsers".

Приложение будет работать следующим образом:

  1. Если запрос приходит с URL-адреса, подобного / external / **, мне нужно пройти аутентификациюManager2, который выполняет поиск в таблице «ExternalUsers».Эти пользователи могут получить доступ только к / external / ** urls
  2. Если запрос приходит с другого URL-адреса, мне нужно пройти аутентификациюManager1 (тот, который у меня есть сейчас), который выполняет поиск в таблице Users.Эти пользователи могут получить доступ ко всем URL-адресам, кроме тех, которые соответствуют шаблону / external / **

В таблицах Users и ExternalUsers могут быть пользователи с одинаковыми именами .Это причина, почему мне нужно установить разные логины в зависимости от URL-адреса, откуда он берется.Оба логина должны быть в одном приложении.

Возможно ли в Spring настроить два разных аутентификацииManager каждый в зависимости от URL-адреса запроса, куда он поступает?

Спасибо

Ответы [ 2 ]

1 голос
/ 14 апреля 2011

В будущей версии Spring Security могут быть предусмотрены несколько менеджеров аутентификации, но до тех пор некоторые настройки будут работать.

Я думаю, что ответ Ральфа направлен в правильном направлении.Вы можете добавить еще один элемент http ( Spring Security 3.1 ) для захвата шаблона внешнего / ** url и добавить свой настраиваемый фильтр входа в систему для передачи другого токена (может называться ExternalUserPasswordAuthenticationToken, который расширяет AbstractAuthenticationToken) для поставщика аутентификации.См. Настройка Spring Security 3.x для нескольких точек входа и мой ответ Аутентификация пользователя с использованием внешнего веб-сервиса в grails для разработки собственных токенов и поставщиков.

Другойспособ, который я бы не рекомендовал, это настроить шаблон Voter для / external / ** url, который выполняет аутентификацию.

1 голос
/ 13 апреля 2011

Не думаю, что весной предоставят его из коробки. Но вы можете реализовать свой собственный провайдер аутентификации (реализовать интерфейс AuthenticationProvider), который делегирует аутентификацию одному из двух стандартных пружинных провайдеров аутентификации в зависимости от некоторой логики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...