Después de que un nuevo usuario envía un formulario de 'Nueva cuenta', quiero iniciar sesión manualmente con ese usuario para que no tenga que iniciar sesión en la página siguiente.
La página de inicio de sesión de formulario normal que pasa por el interceptor de seguridad de primavera funciona bien.
En el controlador de formulario de cuenta nueva, estoy creando un UsernamePasswordAuthenticationToken y configurándolo en SecurityContext manualmente:
SecurityContextHolder.getContext().setAuthentication(authentication);
En esa misma página, luego verifico que el usuario haya iniciado sesión con:
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
Esto devuelve las autoridades que establecí anteriormente en la autenticación. Todo está bien.
Pero cuando se llama a este mismo código en la página siguiente que cargo, el token de autenticación es solo UserAnonymous.
No tengo claro por qué no mantuvo la autenticación que configuré en la solicitud anterior. ¿Alguna idea?
- ¿Podría tener que ver con que los ID de sesión no están configurados correctamente?
- ¿Hay algo que posiblemente esté sobrescribiendo mi autenticación de alguna manera?
- ¿Quizás solo necesito otro paso para guardar la autenticación?
- ¿O hay algo que deba hacer para declarar la autenticación en toda la sesión en lugar de una sola solicitud de alguna manera?
Solo busco algunas ideas que puedan ayudarme a ver lo que está sucediendo aquí.
SecurityContextHolder.getContext().setAuthentication(authentication)
. Funciona y es común, pero existen serias deficiencias de funcionalidad que encontrará si lo hace. Para obtener más información, consulte mi pregunta y la respuesta: stackoverflow.com/questions/47233187/…