2011-01-31 13 views
5

Używamy Spring Security do zarządzania uwierzytelnianiem. Problem, który widzimy, polega na tym, że po przekroczeniu limitu czasu sesji użytkownika między wywołaniem formularza GET a naciśnięciem przycisku zapisu, który wykonuje test POST, są one wysyłane na stronę logowania, ale wiosna zapisuje oryginalne informacje o wpisie w sesji.Wyłącz logikę składowania SavedRequest SpringSecurity

Nasza aplikacja nie przywraca oryginalnego adresu URL po zalogowaniu, ale zamiast tego odsyła je do zwykłej strony początkowej. Działa to dobrze, ale gdy użytkownik powróci na stronę, na której początkowo próbowali POST (formularz GET i POST mają te same adresy URL), Spring próbuje ponownie wysłać POST, co nie jest tym, czego chcemy.

Czy istnieje sposób całkowitego wyłączenia logiki składowania SavedRequest na wiosnę?

+0

Jeśli sesja wygasła, gdzie jest zapisane żądanie pochodzące z? – sourcedelica

+0

Wiosna wydaje się zapisywać żądanie wysłania przed upływem czasu gdzieś, że nowe? sesja wciąż to robi. Wygląda na to, że jest dostępny przez AbstractProcessingFilter.SPRING_SECURITY_SAVED_REQUEST_KEY –

Odpowiedz

3

Wydaje mi się, że numer this jira dotyczy problemu bezpieczeństwa i opisuje, jak sobie z tym poradzić.

+1

Dzięki, nie mogłem znaleźć tego problemu z jirą. Wygląda na to, że konfiguracja, którą muszę dodać, to:

+0

Czy istnieje podobna konfiguracja dla ochrony wiosennej 2.0.5? ExceptionTranslationFilter nie ma requestCache –

0

To wygląda sesja-mocowania-ochrona = atrybut „newSession” na (2.0) lub (3.0) będzie również rozwiązać problem

1

Istnieją dwa scenariusze: 1) Jeśli chcesz, aby po ponawiania logowania, użytkownik powinien zawsze dostać przekazywane do domyślnego adresu URL docelowej zamiast oryginalnym żądanego adresu URL, a następnie umieścić zawsze use-default-target = „true” w security.xml jak

<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) Jeśli chcesz, że na sesji timeout po ponownym zalogowaniu, użytkownik powinien przekazać oryginalny orginalny adres URL, ale nie chcesz ponownie przesłać formularza, a następnie ustawić session-fixation-protection = " newSession "w pliku security.xml, takim jak

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

Proszę umieścić tag zarządzania sesją jako pierwszy wiersz w konfiguracji http.

0

podstawie komentarzu Nathana na Raghuram's answer, z przestrzeni nazw XML to jest coś takiego:

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

<bean id="nullRequestCache" class="org.springframework.security.web.savedrequest.NullRequestCache" /> 
Powiązane problemy