簡體   English   中英

Spring Security 中的“主體”是什么?

[英]What's the “principal” in Spring Security?

我對 Spring 和 Spring Security 真的很陌生。 我正在閱讀有關 Spring Security 的內容,它提出了principal的概念,它應該是當前登錄的用戶。 但是如果我們有不止一個當前登錄的用戶呢? 所以,我的問題是,那么 Spring Security 的委托人究竟是什么?

例如,我已閱讀本教程:

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

而且他們似乎考慮到當前只有一個登錄用戶,但情況並非如此。

如何檢索特定用戶? 以及如何區分正在執行請求的用戶?

主體當前登錄的用戶。 但是,您通過綁定到當前線程的安全上下文檢索它,因此它也綁定到當前請求及其會話。

SecurityContextHolder.getContext()內部通過ThreadLocal變量獲取當前的SecurityContext實現。 因為請求綁定到單個線程,這將為您提供當前請求的上下文。

為簡化起見,您可以說安全上下文在會話中並包含用戶/主體和角色/權限。

如何檢索特定用戶?

你沒有。 所有 API 都旨在允許訪問當前請求的用戶和會話。 讓用戶 A 成為 100 個當前已通過身份驗證的用戶之一。 如果 A 向您的服務器發出請求,它將分配一個線程來處理該請求。 如果您然后執行SecurityContextHolder.getContext().getAuthentication()您在此線程的上下文中執行此操作。 默認情況下,在該線程內,您無權訪問由不同線程處理的用戶 B 的上下文。

以及如何區分正在執行請求的用戶?

您不必這樣做,這就是 Servlet 容器為您所做的。

校長的簡要定義:

Principal代表用戶的身份。

它可以是具有簡單級別的用戶名的 String 對象,也可以是復雜的UserDetails對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM