2010-04-08 13 views
11

Ho implementato un sistema di login-logout con Spring Security 3.0.2, tutto è a posto ma per questa cosa: dopo aver aggiunto un tag di gestione della sessione con l'attributo invalid-session-url, al momento del logout Spring mi reindirizzava sempre sull'URL-invalid-session invece che sul logout-success-url (che ha fatto correttamente prima).Spring Security: Reindirizza a invalid-session-url invece di logout-success-url su logout riuscito

C'è un modo per evitare questo comportamento?

Questa è la mia configurazione:

<http use-expressions="true" auto-config="true"> 
     [...some intercept-url's...] 

    <form-login login-page="/login" authentication-failure-url="/login?error=true" 
      login-processing-url="/login-submit" default-target-url="/home" 
      always-use-default-target="true" /> 

    <logout logout-success-url="/home?logout=true" logout-url="/login-logout" /> 

    <session-management invalid-session-url="/home?invalid=true" /> 
</http> 

Grazie mille.

+1

Ho lo stesso problema. Lo risolvi? – marioosh

risposta

3

Non confondere l'attributo logout-url nel tag di logout con l'attributo invalid-session-url dalla gestione della sessione.

Quest'ultimo è l'URL per eseguire l'azione di disconnessione mentre il primo è l'URL che viene inoltrato a un'azione di disconnessione.

Per dirla in altre parole, quando si crea un pulsante di disconnessione, l'URL per quel pulsante sarebbe il valore logout-url. Ora che il logout è terminato, la sicurezza di primavera, di default, renderà il percorso dell'app root dell'applicazione principale, ad esempio http://yourserver:yourport/yourwebapp/. Questo percorso è sovrascritto da invalid-session-url. Quindi al momento del logout, sarai inoltrato lì.

Per riassumere, se non si desidera il comportamento richiesto, non utilizzare l'attributo invalid-session-url. Spero che questo aiuti.

+0

'invalidate-session =" true "': usa 'invalid-session-url'. 'invalidate-session =" false "': usa l'url del gestore di successo della disconnessione. Vedi: [risposta di Christopher] (http://stackoverflow.com/a/14131584/606662) –

6

Per impostazione predefinita, il processo di disconnessione innanzitutto invaliderà la sessione, quindi innescando la gestione della sessione per reindirizzare alla pagina della sessione non valida. Specificando invalidate-session = "false" risolverà questo comportamento.

<sec:logout logout-success-url="/logout" invalidate-session="false" 
delete-cookies="JSESSIONID" /> 
+0

Quindi come "invalidare" la 'sessione'. –

+0

L'aggiunta di 'delete-cookies =" JSESSIONID "' dovrebbe essere sufficiente – mrgrumpy22