Отключить логику хранения SpringSecurity SavedRequest - PullRequest
6 голосов
/ 31 января 2011

Мы используем Spring Security для управления аутентификацией. Проблема, с которой мы сталкиваемся, заключается в том, что, когда время сеанса пользователя истекло между открытием формы GET и нажатием кнопки сохранения, выполняющей POST, они отправляются на страницу входа в систему, но Spring сохраняет исходную информацию о публикации в сеансе.

Наше приложение не возвращает их к исходному URL после входа в систему, а вместо этого отправляет их обратно на общую стартовую страницу. Это работает нормально, но когда пользователь возвращается на страницу, на которую он первоначально пытался выполнить POST (формы GET и POST - это одни и те же URL-адреса), Spring пытается автоматически повторно отправить POST, что нам не нужно.

Есть ли способ полностью отключить логику хранения SavedRequest в Spring?

Ответы [ 5 ]

3 голосов
/ 01 февраля 2011

Полагаю, этот вопрос о безопасности пружин jira описывает вашу проблему и способы ее решения.

2 голосов
/ 12 апреля 2016

На основании комментария Натана Ответ Рагурама , с пространственно-пространственным XML, это что-то вроде этого:

<security:http>
    <security:request-cache ref="nullRequestCache" />
    <!-- ... -->
</security:http>

<bean id="nullRequestCache" class="org.springframework.security.web.savedrequest.NullRequestCache" />
1 голос
/ 26 июля 2011

Существует два сценария: 1) Если вы хотите, чтобы после повторного входа в систему пользователь всегда перенаправлялся на целевой URL-адрес по умолчанию вместо оригинального запрошенного URL-адреса, а затем всегда указывал в вашей безопасности Always-use-default-target = "true".xml like

<http auto-config="true"> 
.....
<form-login login-page="/login" always-use-default-target="true" default-target-url="/xyz" 
        authentication-failure-url="/login?error=true" login-processing-url="/j_security_check"/>
</http>

1) Если вы хотите, чтобы по истечении времени ожидания сеанса после повторного входа в систему пользователь перенаправлял на первоначально запрошенный URL-адрес, но вы не хотите повторно отправлять форму, тогда вставьте session-fixation-protection = "newSession"в вашем security.xml, например

<http auto-config="true">
<session-management session-fixation-protection="newSession"/> 
.....
</http>

Пожалуйста, поместите тег управления сессиями в качестве первой строки в конфигурации http.

0 голосов
/ 17 декабря 2018

С Spring 4.2.5 я тоже столкнулся с этим.

Мой случай был почти идентичен: отобразить форму GET, дождаться тайм-аута сессии, затем отправить форму POST. В моем приложении после повторной аутентификации отображается стартовая страница. Однако если пользователь затем перейдет к этой форме GET и отправит ее POST, тогда предыдущие параметры POST запоминаются и объединяются в текущий запрос, в результате чего значения, разделенные запятыми в @ Переменные RequestParam.

Я сбросил сеанс в моем контроллере аутентификации и действительно увидел именованный ключ «SPRING_SECURITY_SAVED_REQUEST».

В весенней документации сказано, что по умолчанию «SavedRequestAwareAuthenticationSuccessHandler» используется для извлечения сохраненных данных запроса из сеанса и применения его к запросу.

Я пытался использовать ничего не делающего Хендлера, но не смог заставить его работать.

Я также пытался применить

.

http.sessionManagement () sessionFixation () newSession ().

к конфигурации безопасности, но это не помогло.

Однако

http.requestCache (). RequestCache (new NullRequestCache ());

решил проблему.

0 голосов
/ 01 февраля 2011

Похоже, что атрибут session-fixation-protection = "newSession" в (2.0) или (3.0) также решит проблему

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