2010-04-08 10 views
11

Implementé un sistema de inicio y finalización de sesión con Spring Security 3.0.2, todo está bien, pero para esto: después de agregar una etiqueta de administración de sesión con el atributo de sesión de url no válido, al cerrar sesión, Spring siempre me redireccionaba en la url de sesión no válida en lugar de la logout-exit-url (que antes funcionaba correctamente).Spring Security: Redirigir a la URL de sesión no válida en lugar de logout-exito-url al cerrar la sesión con éxito

¿Hay alguna forma de evitar este comportamiento?

Esta es mi configuración:

<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> 

muchas gracias.

+1

Tengo el mismo problema. ¿Lo resuelves? – marioosh

Respuesta

3

No confunda el atributo logout-url en la etiqueta de cierre de sesión con el atributo invalid-session-url desde la gestión de la sesión.

Este último es el URL para ejecutar la acción de cerrar la sesión mientras que el primero es el URL que se reenvía a una acción de cierre de sesión.

En otras palabras, al crear un botón de cierre de sesión, la URL de ese botón sería el valor logout-url. Ahora cuando finaliza el cierre de sesión, la seguridad de primavera, por defecto, representará la ruta de la aplicación raíz de la aplicación principal, es decir: http://yourserver:yourport/yourwebapp/. Esta ruta se reemplaza por invalid-session-url. Por lo tanto, al cerrar la sesión, se le enviará allí.

En resumen, si no desea el comportamiento que está solicitando, no utilice el atributo invalid-session-url. Espero que ayude.

+0

'invalidate-session =" true "': use 'invalid-session-url'. 'invalidate-session =" false "': use la url del controlador de éxito de cierre de sesión. Ver: [respuesta de Christopher] (http://stackoverflow.com/a/14131584/606662) –

6

De forma predeterminada, el proceso de cierre de sesión invalidará primero la sesión, lo que desencadenará la administración de sesión para redirigir a la página de sesión no válida. Al especificar invalidate-session = "false" se solucionará este comportamiento.

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

Entonces, ¿cómo 'invalidamos' la' sesión'. –

+0

Agregar el 'delete-cookies =" JSESSIONID "' debería ser suficiente – mrgrumpy22

Cuestiones relacionadas