Spring Security中的"主要"是什么?

nbr*_*bro 21 java spring spring-security

我是Spring和Spring Security的新手.我正在阅读关于Spring Security的内容,它出现了principal的概念,它应该是当前登录的用户.但是,如果我们有多个当前登录用户怎么办?所以,我的问题是,那么春季安全的主要内容到底是什么?

我已阅读本教程的示例:

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

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

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

Mar*_*tör 46

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

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

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

如何检索特定用户?

你没有.所有API都旨在允许访问当前请求的用户和会话.让用户A成为100个当前经过身份验证的用户之一.如果A对您的服务器发出请求,它将分配一个线程来处理该请求.如果你那么SecurityContextHolder.getContext().getAuthentication()在这个线程的上下文中这样做.默认情况下,在该线程内,您无权访问由不同线程处理的用户B的上下文.

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

你没必要,这就是Servlet容器为你做的.

  • @nbro 使用 RestController 只需要添加主体参数 [像这里](https://github.com/gmazza/tightblog/blob/trunk/app/src/main/java/org/apache/roller/weblogger/ui/ restapi/UserController.java#L95),Spring 将自动填充它,您可以执行所需的任何安全检查。(例如,如果 P 是“root”,但试图查看“admins”页面,则会抛出 403 错误,但允许它尝试访问他的页面。)请参阅第 15.3.2.3 节 [此处](http://docs.spring.io /spring-framework/docs/3.0.x/reference/mvc.html)对于您可以选择的所有参数,Spring 将自动为您填充。 (2认同)

Ous*_*ama 7

委托人的简要定义:

主体代表用户的身份

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