gpt4 book ai didi

java - Spring Security 中的 "principal"是什么?

转载 作者:IT老高 更新时间:2023-10-28 13:51:13 24 4
gpt4 key购买 nike

我对 Spring 和 Spring Security 非常陌生。我正在阅读有关 Spring Security 的内容,它提出了 principal 的概念,它应该是当前登录的用户。但是,如果我们有多个当前登录用户怎么办?那么,我的问题是,那么 Spring Security 的主体到底是什么?

例如,我已经阅读了本教程:

http://www.mkyong.com/spring-security/get-current-logged-in-username-in-spring-security/

他们似乎考虑到当前只有一个登录用户,但这种情况并不常见。

如何检索特定用户?以及如何区分正在执行请求的用户?

最佳答案

主体当前登录的用户。但是,您通过绑定(bind)到当前线程的安全上下文来检索它,因此它也绑定(bind)到当前请求及其 session 。

SecurityContextHolder.getContext() 通过一个ThreadLocal 变量在内部获取当前的SecurityContext 实现。因为请求绑定(bind)到单个线程,这将为您提供当前请求的上下文。

为简化起见,您可以说安全上下文在 session 中,并且包含用户/主体和角色/权限。

How do I retrieve a specific user?

你没有。所有 API 都旨在允许访问当前请求的用户和 session 。让用户 A 成为 100 个当前经过身份验证的用户之一。如果 A 向您的服务器发出请求,它将分配一个线程来处理该请求。如果您随后执行 SecurityContextHolder.getContext().getAuthentication() 您将在此线程的上下文中执行此操作。默认情况下,您无法从该线程中访问由不同线程处理的用户 B 的上下文。

And how do I differentiate between users that are doing requests?

您不必这样做,这就是 Servlet 容器为您做的事情。

关于java - Spring Security 中的 "principal"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37499307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com