如何在@RestController 中获取用户? [复制]

Posted

技术标签:

【中文标题】如何在@RestController 中获取用户? [复制]【英文标题】:How to get the user in the @RestController? [duplicate] 【发布时间】:2018-09-29 01:38:40 【问题描述】:

我正在创建一个基于 jwt 的身份验证。这是一种魅力。 我已经通过帖子在@restcontroller 中创建了注册和登录方法。

现在,我需要创建更新用户方法。 用于更新登录用户本身的信息。

在 JWT 之前,我们曾经从会话中获取登录用户的 id。如何使用 JWT 做到这一点?

@PostMapping("/user/profile")
public ResponseEntity<?> saveProfile(@Valid @RequestBody UserProfileDTO userProfile) 

    /*  Of course the userPofileForm does not contain a hidden field 
        with the ID of the user because it woud allow the user to mofify 
         it and update another user.
    */

    return null;

【问题讨论】:

检查this和this 【参考方案1】:

这是您如何解决此问题的示例:

@PostMapping("/user/profile")
public ResponseEntity<?> saveProfile(@Valid @RequestBody UserProfileDTO userProfile,Principal userLogin) 
String username=userLogin.getName();
return username;

【讨论】:

【参考方案2】:

尝试将user id 添加到 jwt 的正文中,并在每个经过身份验证的请求的标头中接受 jwt 令牌。

    一旦您的控制器能够获取 jwt 令牌,将其解密并获取用户 ID。 在对 jwt 令牌进行身份验证时,将身份验证添加到 SecurityContextHolder 并在应用程序的任何位置获取用户身份验证

【讨论】:

以上是关于如何在@RestController 中获取用户? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何响应 Spring RestController 返回 ManyToOne 双向 JPA 实体对象?

如何在 Spring Boot 的另一个 RestController 中使用 @Autowired/@Inject 访问 RestController 的路径?

Angular 从 Spring RestController 获取图像并缓存它

ControllerAdvice 的异常处理程序在使用 Spring Boot 的 Rest API 获取请求中不起作用。如何解决?

使用用户/密码保护执行器端点,同时授予 RestController 的公共访问权限

如何在 RestController 中使用基于 JsonView 的两个不同的 getter 进行序列化?