springboot servlet change tomcat servlets spring-security jetty

tomcat - servlet - springboot server



¿Cómo puedo evitar que la seguridad de primavera se anexe, jsessionid=XXX para iniciar sesión en los redireccionamientos? (5)

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.

El problema es que, a falta de 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, por ejemplo /login;jsessionid=8o7pglapojus .

Muchos contenedores admiten esto (¿parece que funciona bien en Tomcat?), Pero parece que Jetty (que es lo que estamos usando en este momento) no tiene: la URL redirigida llega a nuestro enrutador de URL completamente intacta (incluida la jsessionid " parámetro "), y la sesión nombrada no está asociada con la solicitud /login por embarcadero / spring-security (es decir, se proporciona una ID de sesión totalmente nueva en el encabezado Set-Cookie de la respuesta a la solicitud /login ).

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


@ahmet alp balkan:

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

@BalusC:

Si el desarrollador usó FilterChainProxy de Spring Spring para implementar la función de seguridad, simplemente no usa el espacio de nombres http.

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


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.


Como está utilizando embarcadero, simplemente agregue 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: Gestión de sesiones - Jetty Doc


En Spring Security 3.0.0 M1 o posterior, puede configurar disable-url-rewriting="true" en el espacio de nombres <http> . A ver si eso ayuda. También vea esta solicitud de función .