Несколько разных форм входа в Spring Security - PullRequest
4 голосов
/ 12 января 2011

Я использую веб-аутентификацию spring-security с spring-mvc с пользовательской аутентификацией, и пока все хорошо:

Моя проблема: /login загружает представление сполнофункциональная страница, но теперь я должен предоставить аутентификацию для формата iframe / popup (например, для аутентифицированного букмарклета), поэтому загрузка другого представления (или с другими параметрами).

Я вижу два решения, которыене слишком сложно:

  1. В моем действии /login у меня есть способ (пока что мне неизвестен) получить исходный запрос и проверить его по набору URL-адресов, использующих более простойпросмотреть, затем выберите соответствующий вид.=> Как мне получить этот исходный запрос?

  2. Я делаю еще одно действие / форму входа в систему, скажем /login/minimal, которое также отправляет POST на URL-адрес безопасности весны /j_spring_security_check, но мне нужнореализовать механизм хранения / поиска запросов, чтобы исходный запрос выполнялся после успешного входа в систему.=> Я вижу, что это как-то связано с SecurityContextPersistenceFilter, но я не знаю, как это реализовать или назвать.

Ответы [ 2 ]

1 голос
/ 12 января 2011

Если я правильно понимаю ваш вопрос, вы хотите изменить страницу входа в систему на основе исходной строки запроса. Прочтите это сообщение на форуме для доступа к исходному URL запроса из сеанса. Это для более старой версии, но вы должны быть в состоянии использовать это, чтобы начать.

Редактировать У меня не было возможности проверить это, но похоже, что ключ изменился между безопасностью Acegi и Spring Security 3. Похоже, что вы можете получить к нему доступ из сеанса, используя константы в WebAttributes класс. Эффективно

//request is a HttpServletRequest object
SavedRequest savedRequest = (SavedRequest)request.getSession().getAttribute(WebAttributes.SAVED_REQUEST);
String url = savedRequest.getRequestURL();
1 голос
/ 12 января 2011

По первому вопросу:

есть класс org.springframework.security.web.authentication.WebAuthenticationDetails

Содержит только IP-адрес клиента и его сеанса, но

у него есть метод

protected void doPopulateAdditionalInformation(HttpServletRequest request) {}

Полагаю, вы могли бы улучшить это, создав подклассы и добавив URL-адрес запроса. - Но сначала проверьте, является ли запрос запросом из формы входа или «заблокированным» запросом.

Добавлена ​​

Крис Томпсон опубликовал другую часть головоломки , чтобы ответить на ваш вопрос: Он упомянул, что сохраненный запрос можно получить из сеанса:

//request is a HttpServletRequest object
SavedRequest savedRequest = (SavedRequest)request.getSession().getAttribute(WebAttributes.SAVED_REQUEST);
String url = savedRequest.getRequestURL();

Таким образом, вы можете комбинировать это, вместо того чтобы расширять детали WebAuthenticationDetails, вам просто нужно прочитать уже включенный сеанс.

@ см. Крис Томпсон ответ

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