什么是"校长"在Spring Security?

时间:2016-05-28 12:59:46

标签: java spring spring-security

我对Spring和Spring Security真的很陌生。我正在阅读有关Spring Security的内容,它出现了 principal 的概念,它应该是当前登录的用户。但是,如果我们有多个当前登录用户怎么办?那么,我的问题是,那么春季安全的主要原因究竟是什么呢?

我已阅读本教程的示例:

  

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

他们似乎考虑到只有一个当前登录的用户,但情况往往并非如此。

如何检索特定用户?我如何区分正在进行请求的用户?

2 个答案:

答案 0 :(得分:35)

当前登录的用户。但是,您通过绑定到当前线程的安全上下文检索它,因此它也绑定到当前请求及其会话。

SecurityContextHolder.getContext()通过SecurityContext变量在内部获取当前ThreadLocal实施。因为请求绑定到单个线程,所以这将获得当前请求的上下文。

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

  

如何检索特定用户?

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

  

我如何区分正在进行请求的用户?

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

答案 1 :(得分:0)

主体的简要定义:

主体代表用户的身份。

它可以是具有简单级别用户名的String对象,也可以是复杂的 UserDetails 对象。