@AuthenticationPrincipal 和 HandlerMethodArgumentResolver 接口

问题描述 投票:0回答:1

我正在尝试理解 @AuthenticationPrincipal 的用例。

在我的控制器中,我有一个用作参数的方法

@AuthenticationPrincipal User user

目标是从 jwt 获取用户,因此我创建了一个实现 HandlerMethodArgumentResolver 的解析器类。对于supportsParameters,它是我的User类,我的resolveArgument从webRequest获取jwt,对其进行解码并创建一个User对象,返回这个对象(并在我的控制器方法中使用)。

我尝试删除@AuthenticationPrincipal,因为我没有在实现HandlerMethodArgumentResolver的类中使用Principal,它工作得很好,但根据我的研究,“非常建议”使用这个注释,即使它没有。

有人知道为什么以及在这种情况下到底有没有必要使用@AuthenticationPrincipal,这将帮助我更好地理解它?

谢谢你

java spring authentication spring-security annotations
1个回答
0
投票

为什么需要实施

HandlerMethodArgumentResolver
来解决
@AuthenticationPrincipal
? Spring Security 已经附带了一个名为
AuthenticationPrincipalArgumentResolver
的实现来执行此类操作,并将默认启用。

只要您自定义

Authentication
以包含您的用户对象,并在 Spring Security 成功验证用户身份后将其存储到
SecurityContext
,它应该可以开箱即用。

您需要实现

HandlerMethodArgumentResolver
的唯一情况是您不使用spring security,但想要为当前用户指定一个用户对象作为控制器方法中的参数。如果是这种情况,您不需要在控制器的参数中注释
@AuthenticationPrincipal
,因为您的实现与它无关。

© www.soinside.com 2019 - 2024. All rights reserved.