Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring security';s SecurityContextHolder:会话还是请求绑定?_Java_Spring_Jakarta Ee_Spring Security - Fatal编程技术网

Java Spring security';s SecurityContextHolder:会话还是请求绑定?

Java Spring security';s SecurityContextHolder:会话还是请求绑定?,java,spring,jakarta-ee,spring-security,Java,Spring,Jakarta Ee,Spring Security,我从SecurityContextHolder检索的Userprincipal是否绑定到请求或会话 UserPrincipal=(UserPrincipal)SecurityContextHolder.getContext().getAuthentication().getPrincipal() 这是我访问当前登录用户的方式。如果当前会话被破坏,这会失效吗?这取决于您如何配置它(或者说,您可以配置不同的行为) 在Web应用程序中,您将使用与进行交互的 SecurityContextPersist

我从
SecurityContextHolder
检索的Userprincipal是否绑定到请求或会话

UserPrincipal=(UserPrincipal)SecurityContextHolder.getContext().getAuthentication().getPrincipal()


这是我访问当前登录用户的方式。如果当前会话被破坏,这会失效吗?

这取决于您如何配置它(或者说,您可以配置不同的行为)

在Web应用程序中,您将使用与进行交互的

SecurityContextPersistenceFilter的Java文档以以下内容开头:

填充{@链接 SecurityContextHolder}具有 从 配置的{@link SecurityContextRepository}在 请求并将其存储回 请求完成后存储库 完成并清除上下文 持有人默认情况下,它使用{@link HttpSessionSecurityContextRepository}。 有关信息,请参见本课程 HttpSession相关 配置选项

顺便说一句:HttpSessionSecurityContextRepository是SecurityContextRepository的唯一实现(我在默认libs中找到了)

它的工作原理如下:

  • 使用httpSession(Key=“SPRING\u SECURITY\u CONTEXT”)存储
    SecurityContext
    对象
  • SecurityContextPersistenceFilter
    是一个使用
    securitycontextextrepository
    的过滤器,例如
    httpsessionsecuritycontextextrepository
    来加载和存储
    SecurityContext
    对象。如果HttpRequest通过筛选器,筛选器将从存储库中获取
    SecurityContext
    ,并将其放入SecurityContextHolder(
    SecurityContextHolder\setContext
  • SecurityContextHolder
    有两种方法
    setContext
    getContext
    。两者都使用
    SecurityContextHolderStrategy
    来指定在set-and-get-Context方法中到底做了什么。-例如,
    ThreadLocalSecurityContextHolderStrategy
    使用线程本地存储上下文
总之,用户主体(SecurityContext的元素)存储在HTTP会话中。对于每个请求,它都放在一个本地线程中,您可以从那里访问它