2011-01-31 1 views
5

Utilizziamo Spring Security per la gestione dell'autenticazione. Il problema che stiamo vedendo è che quando la sessione di un utente è scaduta tra la presentazione di un modulo GET e il pulsante di salvataggio che fa un POST, vengono inviati alla pagina di accesso ma Spring sta salvando le informazioni originali del post nella sessione.Disabilita logica di salvataggio SavedRequest di SpringSecurity

La nostra app non li riporta all'URL originale dopo il login, ma li rimanda a una pagina iniziale comune. Funziona bene, ma quando l'utente ritorna alla pagina in cui inizialmente aveva provato a POST (il modulo GET e POST sono gli stessi URL) Spring prova a reinoltrare automaticamente il POST che non è quello che vogliamo.

C'è un modo per disabilitare completamente la logica di archiviazione SavedRequest in primavera?

+0

Se la sessione è scaduta, in cui è la richiesta salvata provenienti da? – sourcedelica

+0

Sembra che Spring stia salvando la richiesta di post-timeout da qualche parte quella nuova? la sessione lo ottiene ancora. Sembra che sia accessibile da AbstractProcessingFilter.SPRING_SECURITY_SAVED_REQUEST_KEY –

risposta

3

Immagino che il problema this jira di spring security descriva il problema e come gestirlo.

+1

Grazie, non sono riuscito a trovare il problema di jira. Sembra che la configurazione che devo aggiungere sia:

+0

Esiste una configurazione simile per la sicurezza spring 2.0.5? ExceptionTranslationFilter non ha una richiestaCache –

0

Sembra che la sessione di fissazione di protezione = attributo "newSession", a (2.0) o (3.0) anche risolvere il problema

1

Ci sono due scenari: 1) Se si desidera che dopo nuovo login, utente dovrebbe ottenere sempre trasmesso al l'URL di destinazione di default al posto dell'URL richiesto originale poi mettere sempre usare-default-target = "true" nella vostra security.xml come

<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) Se si desidera che nella sessione timeout dopo il relogin, l'utente deve inoltrare l'URL originale richiesto ma non si desidera inviare nuovamente il modulo, quindi inserire session-fixation-protection = " newSession "nel file security.xml come

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

Inserire il tag di gestione delle sessioni come prima riga nella configurazione http.

0

Basato sul commento di Nathan sul Raghuram's answer, con XML namespace è qualcosa di simile:

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

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