2013-10-25 2 views
4

У меня есть страница с несколькими ссылками на другие страницы приложения. Когда пользователь посещает веб-сайт, отображается системная страница, доступная, даже если пользователь не вошел в систему. Однако, если пользователь нажимает на какую-то другую ссылку, которая ожидает, что пользователь войдет в систему, пользователь будет правильно перенаправлен на страницу входа в систему , Однако после входа в систему пользователь не перенаправляется на ссылку, на которую был сделан щелчок, вместо этого пользователь отправляется на страницу системы (системная страница является целевым URL-адресом по умолчанию).Spring 3.1: Перенаправление после входа в систему не работает

Вот отрывок из пружинной конфигурационного файла -

<logout logout-url="/logout" 
    logout-success-url="/login" 
    invalidate-session="true" /> 

<form-login login-page="/login" 
    login-processing-url="/j_security_check" 

    always-use-default-target="false" 
    authentication-failure-url="/login?failure=true" 
    username-parameter="username" 
    password-parameter="password"/> 

Я попытался с помощью authentication-success-handler-ref свойства ссылаться на SavedRequestAwareAuthenticationSuccessHandler экземпляр, однако, что не работает.

Любые входы?

+0

увидеть эту дискуссию в весеннем форуме http://forum.spring.io/forum/spring-projects/security/83064-question-on-authentication-success-handler –

ответ

3

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

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

See this example which explains the same concept you are looking for

Good Article which also explains same concept in detail with a little bit different way

SavedRequestAwareAuthenticationSuccessHandler:

В вашем случае вы должны использовать стратегию успешной аутентификации, которая может сделать использование DefaultSavedRequest, которые, возможно, были сохранены в сессии по ExceptionTranslationFilter , Когда такой запрос перехватывается и требует аутентификации, данные запроса сохраняются для записи исходного адресата до начала процесса аутентификации и для разрешения повторного запроса запроса при переадресации на тот же URL-адрес. Этот класс отвечает за выполнение перенаправления на исходный URL-адрес, если это необходимо.

  • Если свойство alwaysUseDefaultTargetUrl установлен в true, то defaultTargetUrl будет использоваться для этой цели. Любой DefaultSavedRequest, сохраненный в сеансе, будет удален.

  • Если в запросе установлено значение targetUrlParameter, это значение будет использоваться в качестве адресата. Любой DefaultSavedRequest снова будет удален.

  • Если DefaultSavedRequest находится в RequestCache (как установлено ExceptionTranslationFilter для записи оригинального назначения до того, как процесс аутентификации началась), перенаправление будет выполняться на URL-адрес этого первоначального назначения. Объект DefaultSavedRequest останется в кэше и будет поднят при получении перенаправленного запроса (см. SavedRequestAwareWrapper).

  • Если DefaultSavedRequest не найден, он будет делегировать базовому классу.