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