[英]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.