2010-02-18 13 views
31

Cuando un cliente no autenticado solicita una URL que requiere un nivel de acceso no anónimo como se define en security-config.xml, la seguridad de primavera envía un redireccionamiento HTTP a nuestra página de inicio de sesión (por ejemplo, /login). Esta bien.¿Cómo puedo evitar que la seguridad de primavera se anexe; jsessionid = XXX a los redireccionamientos de inicio de sesión?

El problema es que, al no existir una sesión existente (identificada por una cookie provista por el cliente), spring-security emite un redireccionamiento que también especifica la nueva sesión del cliente en la URL, p. /login;jsessionid=8o7pglapojus.

Muchos contenedores admiten esto (aparentemente funciona bien en tomcat?), Pero parece que Jetty (que es lo que estamos utilizando ahora) no tiene: la URL redirigida llega a nuestro enrutador de URL completamente intacta (incluyendo el "parámetro" jsessionid, y la sesión nombrada no está asociada con la solicitud /login por muelle/seguridad de primavera (es decir, se proporciona una ID de sesión totalmente nueva en el encabezado Set-Cookie de la respuesta a la solicitud /login).

Podemos solucionar esto haciendo coincidir /login.* en nuestras rutas, pero tengo curiosidad por saber si hay alguna manera de evitar la emisión de la identificación de sesión en la redirección de autenticación para comenzar.

Respuesta

42

En Spring Security 3.0.0 M1 o posterior, podría establecer disable-url-rewriting="true" en el espacio de nombres <http>. A ver si eso ayuda. También vea esto feature request.

+0

@BalusC ninguna solución conocida previamente muelle 3? – Xorty

+0

@Xorty Eche un vistazo a http://fralef.org/tomcat-disable-jsessionid-in-url.html, si la actualización a Spring Security 3+ no es una opción. –

8

Ahora se ve así.

<security:http auto-config="false" use-expressions="true" disable-url-rewriting="true"> 

Después de esto, su aplicación no podrá realizar trabajos con estado correctamente.

+2

¿Quiere decir que si el cliente no permite cookies, solo entonces la aplicación no podrá realizar trabajos completos estatales? – Sudarshan

0

@ahmet alp Balkan:

seamframework proporcionar una solución mejor que randomcoders. http://seamframework.org/Documentation/RemovingJSESSIONIDFromYourURLsAndFixingScache

@BalusC:

Si FilterChainProxy revelador usado de seguridad de resorte para implementar la función de Securtiy, simplemente no usando http espacio de nombres.

Luego no pudimos encontrar una manera de agregar disable-url-rewriting sin intentar agregar un filtro personalizado a la cadena de filtro, o insertar un filtro independiente a web.xml.

0

dado que está utilizando embarcadero, sólo tiene que añadir la siguiente etiqueta context-param en su web.xml,

<!-- Disables appending JSESSSIONID in browser address bar/requests --> 
<context-param> 
    <param-name>org.eclipse.jetty.servlet.SessionIdPathParameterName</param-name> 
    <param-value>none</param-value> 
</context-param> 

Consulte: Session Management - Jetty Doc

Cuestiones relacionadas