这个例子中principal和authentication有什么区别?

What is the difference between principle and authentication in this example?

我正在学习 Spring 安全性,无法理解身份验证和主体之间的区别。我确实明白下面的代码在逻辑上没有联系,但据我所知 authenticationprincipal 让我们有可能从当前登录的用户。

@PreFilter("filterObject.owner == authentication.name")
@PreAuthorize("hasRole('ADMIN') or principal.userId == #id")

Principal代表登录的User。 Spring 的 Authentication 接口扩展了 Principal 接口,因此 Authentication is a Principal.

在用户通过身份验证之前,Authentication 可以代表身份验证请求的令牌。

用户通过身份验证后,它可以提供有关委托人的额外信息,例如通过getAuthorities(..)认证成功后,可以获取委托人被赋予的权限