Spring Security的SecurityContextHolder:会话或请求绑定?

Spring Security的SecurityContextHolder:会话或请求绑定?,第1张

Spring Security的SecurityContextHolder:会话或请求绑定?

这取决于您如何配置它(或者说,您可以配置其他行为)。

在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
    。两者都使用a
    SecurityContextHolderStrategy
    来指定在set-和get-Context方法中究竟要执行什么 *** 作。-例如,
    ThreadLocalSecurityContextHolderStrategy
    使用本地线程存储上下文。

因此,总而言之:用户主体(SecurityContext的元素)存储在HTTP会话中。对于每个请求,它都放在访问它的本地线程中。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5175965.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-19
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存