gpt4 book ai didi

spring - 将参数传递给 Controller

转载 作者:行者123 更新时间:2023-12-04 19:59:38 24 4
gpt4 key购买 nike

我有一些带有 JWT 身份验证的应用程序。目前,我有这样的 Controller :

@RestController
@RequestMapping("users")
public class UserController {
@PostMapping(value = "{userId}/rate/inc")
public Double incRate(@PathVariable Long userId) {
return service.incUserRate(userId);
}
}

但是,我想通过过滤器中的 token 获取用户并将其作为方法的参数传递。例如:

@PostMapping(value = "/rate/inc")
public Double incRate(User user) {
returnservice.incUserRate(user);
}

这可能吗?

最佳答案

实现argument resolver并将你需要的一切注入(inject)到你的 Controller 中。

默认情况下,Spring 允许您注入(inject)默认包含用户电子邮件的 Principal 对象(这是 Spring Security 中的默认实现)。但是您可以通过实现 Interface HandlerMethodArgumentResolver<User> 来注入(inject)您的企业登录用户帐户。 .

我建议你创建一个像 @AuthorizedUser 这样的注释在做标记你的User带有此注释的参数。并根据 Controller 方法中的此注释存在,通过 HandlerMethodArgumentResolver 注入(inject)您的用户.

@Component
public class UserArgumentHandlerResovler implements HandlerMethodArgumentResolver {

@Autowired
private UserRepository userRepository;

public boolean supportsParameter(MethodParameter parameter) {
return parameter.isAnnotationPresent(AuthorizedUser.class);
}

public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String email = (String) auth.getPrincipal(); // <- it is a pseudocode, check your Authentication implementation to get email for example.
return userRepository.findByEmail(email);
}
}

关于spring - 将参数传递给 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48601677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com