成功登录后,如何在春季RestController
中检索已登录的用户?
我使用以下方法/原则来获取已记录的用户,但它会检索anonymousUser而不是已记录的用户。
Principal principal = SecurityContextHolder.getContext().getAuthentication();
或
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
答案 0 :(得分:1)
您可以从Authentication对象获取登录的用户名。要获取用户对象,您可以使用从身份验证对象中检索的用户名。
这样的事情应该有效:
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String name = auth.getName();
User user = userService.findByUserName(name);
或者更好的是,您可以在控制器中使用Principal作为参数,并让Spring传递正确的主体对象。如果用户未登录,则为空。
public String hello(Principal principal ) {
String name = principal.getName();
User user = userService.findByUserName(name);
}
Ps:如果您获得匿名身份验证,则用户未经过身份验证。 SecurityContext返回匿名身份验证,用户未登录。 `