Spring security 3.0: SavedRequest всегда нулевой - PullRequest
1 голос
/ 27 февраля 2012

В моем приложении я использую Spring Security 3.0 и в классе, используемом для перехвата «пост-аутентификации», у меня что-то вроде:

public class CustomAuthenticationHandler extends SavedRequestAwareAuthenticationSuccessHandler {

   public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException {

    SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response);
...
   }
}
<security:http>
    <security:form-login login-page="/login/" always-use-default-target="false"  authentication-success-handler-ref="customAuthenticationHandler" authentication-failure-url="/login/?login_error=1"/>
 ...
</security:http>

<bean id="customAuthenticationHandler" class="org.myproject.CustomAuthenticationHandler"/>

Когда я вхожу со стандартной страницы «X» внутри приложения, после успешной аутентификации я ожидаю перенаправления на «X», но я всегда захожу на домашнюю страницу. Переменная 'saveRequest' выше всегда возвращает значение NULL. Отсутствуют ли какие-либо конкретные настройки? Как я могу получить правильное перенаправление?

1 Ответ

0 голосов
/ 27 февраля 2012

Это действительно зависит от того, что вы подразумеваете под «входом с общей страницы« X »внутри приложения».

Если вы имеете в виду, что вы уже просматриваете эту страницу, а затем выберите доступ к странице входа (или у вас есть встроенная форма входа в систему), тогда вы не будете перенаправлены на страницу "X", поскольку Spring Security не знает, на какой странице вы находились, когда вы решили войти в систему. Вам придется либо перенаправить на указанное местоположениес помощью заголовка Referer или сохраните историю просмотров страниц в логике приложения.

Механизм SavedRequest используется только в том случае, если вы пытаетесь получить доступ к защищенному ресурсу, а Spring Security необходимо перенаправить васна страницу входа.Он временно записывает местоположение, чтобы он мог попытаться восстановить исходное поведение запроса после входа в систему.

Если «X» была защищенной страницей, и вы пытались ее просмотреть, то SavedRequest с URL"X" будет кэшироваться в сеансе, пока вы будете перенаправлены на страницу входа.

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