这取决于你如何配置它(或者说,你可以配置其他行为)。
在Web应用程序中,你将使用与
ThreadLocalSecurityContextHolderStrategy交互的
SecurityContextPersistenceFilter。
的Java文档
SecurityContextPersistenceFilter以:
在请求之前,使用从已配置的{@link SecurityContextRepository}获取的信息填充{@link SecurityContextHolder},并在请求完成并清除上下文所有者后将其存储回存储库中。默认情况下,它使用{@link HttpSessionSecurityContextRepository}。请参阅此类以获取与HttpSession相关的配置选项的信息。
顺便说一句:HttpSessionSecurityContextRepository是SecurityContextRepository的唯一实现(我在默认库中找到了)
它是这样的:
HttpSessionSecurityContextRepository
用途HttpSession
中(Key=”SPRING_SECURITY_CONTEXT”)来存储一个SecurityContext
对象。SecurityContextPersistenceFilter
是一种使用一个过滤器SecurityContextRepository
例如HttpSessionSecurityContextRepository
加载和存储SecurityContext
对象。如果HttpRequest通过了过滤器,则过滤器SecurityContext
将从存储库中获取并将其放入SecurityContextHolder(SecurityContextHolder#setContext)
- 在
SecurityContextHolder
有两个方法setContext
和getContext
。两者都使用a SecurityContextHolderStrategy
来指定在set-
和get-Context
方法中究竟要执行什么操作。-例如,ThreadLocalSecurityContextHolderStrategy
使用本地线程存储上下文。
因此,总而言之:用户主体(SecurityContext的元素)存储在HTTP会话中。对于每个请求,它都放在访问它的本地线程中。



