spring security - example - navegando a la página de inicio de sesión de seguridad de primavera redirige a la URL de sesión no válida
spring security tutorial (1)
Para redirigir al usuario a una url que deseo en el tiempo de espera de la sesión, recientemente agregué lo siguiente a mi archivo de seguridad de primavera ....
<http pattern="/resources/**" security="none"/>
<http pattern="/resources/js/**" security="none"/>
<http pattern="/resources/css/**" security="none"/>
<!-- excluded pages -->
<http pattern="/login.htm" security="none"/>
<http pattern="/j_spring_security_check" security="none"/>
<http pattern="/accessDenied.htm" security="none"/>
<http pattern="/error.htm" security="none"/>
<http use-expressions="true" auto-config="false" entry-point-ref="loginUrlAuthenticationEntryPoint">
<!-- custom filters -->
<custom-filter position="FORM_LOGIN_FILTER" ref="twoFactorAuthenticationFilter" />
<custom-filter after="SECURITY_CONTEXT_FILTER" ref="securityLoggingFilter"/>
<!-- session management -->
<session-management
invalid-session-url="/sessionExpired.htm"
session-authentication-error-url="/alreadyLoggedIn.htm">
<concurrency-control
max-sessions="1"
expired-url="/sessionExpiredDuplicateLogin.htm"
error-if-maximum-exceeded="false"
session-registry-alias="sessionRegistry"/>
</session-management>
Cuando la sesión caduca en el siguiente clic, el usuario es llevado a /sessionExpired.htm, que es el efecto deseado. SIN EMBARGO, ahora tengo un problema cuando navego a la página de inicio de sesión (login.htm), me redireccionan a invalid-session-url (/sessionExpired.htm).
Obviamente esto no es lo que quiero que pase. He estado leyendo sobre esto y una de las soluciones sugeridas parece ser eliminar la cookie jsessionid como tal y también establecer invalidate-session en falso (ahora invalido la sesión en el método del controlador para logout.htm) ...
<logout logout-success-url="/logout.htm" invalidate-session="false" delete-cookies="JSESSIONID"/>
lo he intentado pero parece que no funciona. ¿Puede alguien ayudarme a entender qué está pasando aquí y cómo puedo resolverlo? Parece que cuando voy a la página de inicio de sesión estoy tratando de recordar quién soy.
Gracias
Tuve este problema en Tomcat (no estoy seguro de si solo se aplica).
De la documentación de Tomcat ( ver aquí ) podemos concluir que la ruta generada para la cookie de sesión tiene una barra inclinada:
Algunos navegadores, como IE, enviarán una cookie de sesión para un contexto con una ruta de / foo con una solicitud a / foobar. Para evitar esto, Tomcat agregará una barra inclinada a la ruta asociada con la cookie de sesión, por lo que, en el ejemplo anterior, la ruta de la cookie se convierte en / foo /. Sin embargo, con una ruta de cookies de / foo /, IE ya no enviará la cookie con una solicitud a / foo. Esto no debería ser un problema a menos que haya un servlet mapeado a / *. En este caso, esta función deberá estar desactivada. El valor predeterminado de este atributo es cierto. Para desactivar esta función, establezca el atributo en falso.
Por otro lado, CookieClearingLogoutHandler de spring-security generará una ruta de cookies sin la barra al final. El encabezado de respuesta de la cookie set se enviará al navegador, pero la ruta de la cookie no coincidirá con la ruta porque falta la barra diagonal.
El navegador no borrará la cookie JSESSIONID existente porque las rutas no coinciden.
Resolví mi problema al implementar una implementación personalizada de CookieClearingLogoutHandler.