Сделать Spring Security добавить возврат к URL в строке запроса для страницы входа - PullRequest
4 голосов
/ 15 января 2011

Ранее я спрашивал , возможно ли получить исходный URL-адрес запроса на странице входа в форму в Spring Security 2. Оказывается, что на самом деле мне это не поможет, мне нужно перенаправить на страница входа в систему, чтобы включить ее в качестве параметра запроса. Так что если у меня есть:

<form-login login-page="/login.html" /> 

и попробуйте получить доступ к /secure.html Я хочу оказаться в /login.html?return_to=/secure.html.

Ответы [ 3 ]

10 голосов
/ 15 января 2011

Полагаю, вам нужно использовать spring-security-redirect .По сути, если ваш URL-адрес имеет вид /login.html?spring-security-redirect=/secure.html, Spring Security будет автоматически перенаправлять в secure.html при успешном входе в систему.Вам нужно будет добавить:

authentication-success-handler-ref="simpleUrlAuthenticationSuccessHandler"

... к вашемуэлемент и добавить компонент, который выглядит как:

<!-- Emulates the functionality of spring security 3.0.x by specifying the targetUrlParameter to be the value it
    defaulted to in 3.0.x. As of 3.1.x this is null by default with no option to specify in <form-login> -->
<beans:bean id="simpleUrlAuthenticationSuccessHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
    <beans:property name="useReferer" value="true"/>
    <beans:property name="defaultTargetUrl" value="/account"/>
    <beans:property name="targetUrlParameter" value="spring-security-redirect"/>
</beans:bean>
7 голосов
/ 19 января 2011

Перенаправление на форму авторизации осуществляется AuthenticationEntryPoint.Для Spring Security 3.0+ это обычно будет экземпляр LoginUrlAuthenticationEntryPoint.В 2.0 соответствующий класс - AuthenticationProcessingFilterEntryPoint.

. Точка входа вызывается ExceptionTranslationFilter, который также отвечает за кэширование запроса.Поэтому вы можете написать пользовательский AuthenticationEntryPoint, который перенаправляет на URL страницы входа в систему с добавленным дополнительным параметром (содержащим текущий URI запроса).Код должен быть практически идентичен стандартной реализации.

Вы можете добавить пользовательскую AuthenticationEntryPoint в конфигурацию пространства имен, используя атрибут entry-point-ref в элементе пространства имен http.Если вы используете простые бобы, вы должны добавить их в ExceptionTranslationFilter.

0 голосов
/ 28 сентября 2013

Если вы используете свою собственную страницу входа и хотите использовать подход, предложенный Рагурамом, вы также должны поместить в форму скрытое поле с именем targetUrlParameter

Для вашего примера (то есть с использованием * return_to * параметра URL) это будет что-то вроде:

<input type="hidden" name="spring-security-redirect" value="<c:out value="${param.return_to}" escapeXml="true" />" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...