En SpringSecurity tiene un nombre de clase SecurityContextHolder y su especificación: 'Asocia un SecurityContext dado con el hilo de ejecución actual.' Con la aplicación web cada vez que llega una solicitud al servidor, entonces Spring también vuelve a cargar y establece SecurityContext de esa solicitud en SecurityContextHolder para su hilo.¿Cómo gestiona Spring Security SecurityContext en un hilo entre las solicitudes de aplicaciones web?
¿Cómo gestiona Spring Security SecurityContext en un hilo entre las solicitudes de aplicaciones web?
Respuesta
Con la aplicación web cada vez que llega una solicitud al servidor, entonces Spring también vuelve a cargar y establece SecurityContext de esa solicitud en SecurityContextHolder para su hilo?
Básicamente sí.
El comportamiento predeterminado de SecurityContextHolder.getInstance()
es devolver una instancia SecurityContextHolder
que almacenó como un subproceso local del subproceso actual. (Esto es sólo el mecanismo por defecto. Se puede utilizar una estrategia diferente para localizar el SecurityContextHolder
llamando SecurityContextHolder.setStrategemName()
)
A filtros SpringSecurity asegurar que de la solicitud SecurityContextHolder
(sin embargo se encuentra) se carga con las credenciales de petición al inicio y que el titular se borra al final del proceso de solicitud.
Elaborar, la clave es que el filtro se ve en los atributos de la invocación remota de la seguridad contexto. Solo si hay un contexto de seguridad en los atributos de invocación remota, puede configurarse en SecurityContextHolder. Este contexto de seguridad normalmente se suministra desde el cliente con un filtro similar que procesa la invocación saliente y coloca el contexto de seguridad desde el hilo local en la invocación remota. – Zach
[¿Por qué esto no funciona] (https://github.com/spring-projects/spring-security/issues/3919) para mí? Ver [pregunta de stackoverflow] (http://stackoverflow.com/questions/34273755/why-is-the-authentication-object-of-the-securitycontext-not-shared-across-thread). – displayname
Sí, el SecurityContextPersistenceFilter se encarga de esto. Por defecto, localiza el SecurityContext en la HttpSession y lo vincula al hilo a través de SecurityContextHolder. Cuando la solicitud finaliza el proceso, realiza el proceso inverso: toma el SecurityContext del hilo y lo coloca en la sesión.
Desde el Javadoc:
rellena la SecurityContextHolder con información obtenida de la configurado SecurityContextRepository antes de la solicitud y almacena de nuevo en el depósito una vez que la solicitud ha completado y despejar el titular contexto. Por defecto usa un HttpSessionSecurityContextRepository.
¿No debería eso también hacerlo seguro para hilos? Parece que 'SecurityContext' no se comparte entre subprocesos en mi aplicación ([link] (http://stackoverflow.com/questions/34273755/why-is-the-authentication-object-of-the-securitycontext-not -shared-across-thread)). – displayname
- 1. ¿Cómo almacenar información personalizada en SecurityContext of spring-security?
- 2. burying authentication spring security
- 3. ¿Cómo funcionan las sesiones de Spring Security?
- 4. Spring Security Child Thread Context
- 5. Spring Security en una aplicación distribuida
- 6. spring-security cómo ACL otorga permisos
- 7. Spring 3.0 Security - Autorización con autenticación
- 8. Spring Security: setUserPrincipal manualmente
- 9. ¿Cómo uso las funciones/autoridades personalizadas en Spring Security?
- 10. Spring security openId support y user deauthentication
- 11. Spring Security en una aplicación web sin estado?
- 12. Configuración básica de Spring Security
- 13. ¿Cómo gestiona la agrupación de objetos en Spring?
- 14. Filtro IP usando Spring Security
- 15. Spring Security Encrypt MD5
- 16. spring security AuthenticationManager vs AuthenticationProvider?
- 17. Grails Spring Security Testing
- 18. Cómo configurar Spring Security SecurityContextHolder strategy?
- 19. ¿Cómo se manejan las solicitudes de Ajax en Spring MVC?
- 20. Marco como Spring Security para Java EE?
- 21. Web API Security
- 22. Uso programático de Spring Security
- 23. Integración GWT 2.0 con Spring Security 3.0
- 24. Spring Security Meta Annotation
- 25. Spring Security filtro personalizado
- 26. Spring security accessing principal
- 27. ¿Debo usar Security Manager en aplicaciones web Java?
- 28. ¿Cómo gestiona su empresa las credenciales?
- 29. spring-security: autorización sin autenticación
- 30. Cómo implementar Openid connect y Spring Security
Por favor, vea http://stackoverflow.com/questions/6408007/spring-securitys-securitycontextholder-session-or-request-bound – Ritesh