我对Spring和Spring Security真的很陌生。我正在阅读有关Spring Security的内容,它出现了 principal 的概念,它应该是当前登录的用户。但是,如果我们有多个当前登录用户怎么办?那么,我的问题是,那么春季安全的主要原因究竟是什么呢?
我已阅读本教程的示例:
http://www.mkyong.com/spring-security/get-current-logged-in-username-in-spring-security/
他们似乎考虑到只有一个当前登录的用户,但情况往往并非如此。
如何检索特定用户?我如何区分正在进行请求的用户?
答案 0 :(得分:35)
主是当前登录的用户。但是,您通过绑定到当前线程的安全上下文检索它,因此它也绑定到当前请求及其会话。
SecurityContextHolder.getContext()
通过SecurityContext
变量在内部获取当前ThreadLocal
实施。因为请求绑定到单个线程,所以这将获得当前请求的上下文。
为了简化,您可以说安全上下文在会话中并包含用户/主体和角色/权限。
如何检索特定用户?
你不是。所有API都旨在允许用户访问&当前请求的会话。让用户A成为100个当前经过身份验证的用户之一。如果A对您的服务器发出请求,它将分配一个线程来处理该请求。然后,如果您执行SecurityContextHolder.getContext().getAuthentication()
,则在此线程的上下文中执行此操作。默认情况下,在该线程中,您无法访问由不同线程处理的用户B的上下文。
我如何区分正在进行请求的用户?
您不必,这就是Servlet容器为您所做的事情。
答案 1 :(得分:0)
主体的简要定义:
主体代表用户的身份。
它可以是具有简单级别用户名的String对象,也可以是复杂的 UserDetails 对象。