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