在SpringSecurity它有一个类名SecurityContextHolder中及其规范:“同事给定的SecurityContext与当前执行线程。”有了Web应用程序,每当请求到达服务器时,Spring也会在SecurityContextHolder中为其线程重新加载并设置该请求的SecurityContext?Spring Security如何通过Web应用程序请求管理线程中的SecurityContext?
回答
随着Web应用程序每当请求到服务器,然后Spring也重新加载并设置该请求的SecurityContext在SecurityContextHolder为其线程?
基本上是肯定的。
SecurityContextHolder.getInstance()
的默认行为是返回一个作为当前线程的线程本地存储的SecurityContextHolder
实例。 (这只是默认的机制,你可以通过调用SecurityContextHolder.setStrategemName()
使用不同的战略定位SecurityContextHolder
)
一个SpringSecurity过滤器确保请求的SecurityContextHolder
(但它的位置)加载在开始请求证书和在请求处理结束时清除持有者。
诠,关键是过滤器中查找安全远程调用属性上下文。只有在远程调用属性中存在安全上下文时,才可以在SecurityContextHolder中设置它。此安全上下文通常由客户端提供,并使用类似的过滤器来处理外发调用,并将安全上下文从本地线程放置到远程调用中。 – Zach
[为什么这不起作用](https://github.com/spring-projects/spring-security/issues/3919)对我来说?请参阅[stackoverflow问题](http://stackoverflow.com/questions/34273755/why-is-the-authentication-object-of-the-securitycontext-not-shared-across-thread)。 – displayname
是的,SecurityContextPersistenceFilter注意到了这一问题。默认情况下,它将SecurityContext定位到HttpSession中,并通过SecurityContextHolder将其绑定到线程。当请求完成处理时,它会做相反的处理 - 它从线程中获取SecurityContext并将其放入会话中。
从Javadoc中:
用从所述 获得的信息通过SecurityContextHolder配置SecurityContextRepository请求并存储 之前它放回仓库一旦请求已完成和清除 上下文保持器。默认情况下,它使用一个 HttpSessionSecurityContextRepository。
不应该让它也是线程安全的吗?看来,'SecurityContext'不被跨线程共享我的应用程序([链接](http://stackoverflow.com/questions/34273755/why-is-the-authentication-object-of-the-securitycontext-not -shared-跨线程))。 – displayname
- 1. JSF 2.1 web应用程序的Spring Security
- 2. 管理新的应用程序请求
- 3. 如何在C#web应用程序中管理线程?
- 4. 如何在Spring Security测试中通过WithSecurityContextFactory设置SecurityContext?
- 5. 为什么Spring Security在线程局部变量中存储SecurityContext
- 6. Web应用程序请求过滤器
- 7. Web应用程序请求
- 8. 区分应用程序处理程序中的Web API请求和MVC请求
- 9. 在Rails中通过多个请求管理线程
- 10. 通过命令行管理Tomcat中的Web应用程序
- 11. 如何管理JMX Web应用程序
- 12. Azure Web应用程序管理 - 通过REST的应用程序设置
- 13. UWP应用程序中的Web请求
- 14. 通过tor网络处理Java桌面应用程序中的Web请求?
- 15. Spring:从Web应用程序线程访问请求(会话)作用域Bean线程(来自线程池)
- 16. 基于Spring Security的Web应用程序在启动过程中崩溃(NullPointerException)
- 17. 如何处理Hibernate/Spring应用程序中的后台线程
- 18. 通过应用程序Jenkins管理
- 19. Web应用程序中的线程Java
- 20. 如何管理通用应用程序中的单独应用程序代理
- 21. asp.net web表单线程在请求处理中的线程
- 22. 如何管理Angular 4应用程序和应用程序之间的身份验证(Spring Boot/security)?
- 23. 如何通过简单的升级管理创建Spring Web App安装程序?
- 24. 在多线程Web应用程序中访问请求范围的bean
- 25. 用于用户管理的Spring Web应用程序模板
- 26. 重定向循环中的Spring Security OAuth2(google)web应用程序
- 27. Spring Security for multiuser Spring MVC web应用程序
- 28. Spring Security中的注销处理程序
- 29. 如何在类似代理的netty应用程序中管理请求
- 30. Spring批处理管理Web应用程序作业清单
请参阅http://stackoverflow.com/questions/6408007/spring-securitys-securitycontextholder-session-or-request-bound – Ritesh