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 .
Otra solución está aquí (para aquellos Spring Security en absoluto, es decir, para mí)
http://randomcoder.com/articles/jsessionid-considered-harmful
Crea un contenedor de filtros de servlets y administra los maneja esto.