Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';这是“什么?”;“委托人”;春天的安全?_Java_Spring_Spring Security - Fatal编程技术网

Java 什么';这是“什么?”;“委托人”;春天的安全?

Java 什么';这是“什么?”;“委托人”;春天的安全?,java,spring,spring-security,Java,Spring,Spring Security,我对Spring和Spring Security是个新手。我读到了关于Spring安全性的文章,它提出了principal的概念,应该是当前登录的用户。但是如果我们有一个以上的当前登录用户呢?那么,我的问题是,在spring security中,到底什么是校长 例如,我已经阅读了本教程: 而且他们似乎考虑到只有一个当前登录的用户,这种情况并不常见 如何检索特定用户?如何区分正在执行请求的用户?主体是当前登录的用户。但是,您可以通过绑定到当前线程的安全上下文来检索它,因此它也绑定到当前请求及其会

我对Spring和Spring Security是个新手。我读到了关于Spring安全性的文章,它提出了principal的概念,应该是当前登录的用户。但是如果我们有一个以上的当前登录用户呢?那么,我的问题是,在spring security中,到底什么是校长

例如,我已经阅读了本教程:

而且他们似乎考虑到只有一个当前登录的用户,这种情况并不常见

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

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

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

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

如何检索特定用户

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

我如何区分处理请求的用户


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

主体的简要定义:

主体表示用户的身份


它可以是一个简单级别上具有username的字符串对象,也可以是一个复杂的UserDetails对象。

因此,我的后续问题是:spring如何区分会话和用户?我想这需要对春天有更深的理解…谢谢!回答得好。我只有一个疑问,这是因为我在创建web应用程序等方面的经验减少。但在此之前,让我尝试解释一下我认为我知道的。据我所知,HTTP请求可以通过会话ID进行增强。Tomcat(或其他什么)可能会使用这些信息来区分用户和请求。主体是当前上下文的当前登录用户。要理解有一个登录用户(主体),会话号可能必须与之关联。现在,假设我有两个登录用户,分别是
root
admin
,我有一个控制器,其请求映射为
/users/{username}
。进一步假设
root
正在客户端的URL
www.host.com:3000/users/root
上玩他的帐户。此时,我想已经为root生成了会话ID。如果它现在试图通过手动更改URL等方式向
www.host.com:3000/users/admin
发出请求,并且admin也从另一台机器连接并登录,那么会发生什么情况?我猜服务器不允许这样做,因为请求可能不包含正确的信息,例如,正确的会话id?@nbro With RestController只需添加主体参数,Spring将自动填充它,您可以执行任何需要的安全检查。(例如,如果P为“root”,但试图查看“admins”页面时抛出403错误,但允许该错误,则P尝试查看其页面。)请参阅第15.3.2.3节,了解您可以选择的所有参数,Spring将自动为您填充。另请参阅:。