通过spring security(angularjs)

时间:2016-09-20 10:18:06

标签: java angularjs spring spring-security

成功登录后,如何在春季RestController中检索已登录的用户?

我使用以下方法/原则来获取已记录的用户,但它会检索anonymousUser而不是已记录的用户。

Principal principal = SecurityContextHolder.getContext().getAuthentication();

Authentication auth = SecurityContextHolder.getContext().getAuthentication();

1 个答案:

答案 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返回匿名身份验证,用户未登录。 `