首页 > 解决方案 > 从 OAuth2.0 访问用户电子邮件?

问题描述

我想从 OAuth2.0 访问登录用户的电子邮件地址。只是为了确保正确的用户有权登录。

然后我需要使用这段代码:

@RequestMapping("/user")
public Principal user(Principal principal) {
    return principal;
}

从 JavaScript 调用:

<div>
     Logged in as: <span id="user"></span>
</div>

$.get("/user", function(data) { // Call Java code with GET request
   $("#user").html(data.userAuthentication.details.name); // Set id=user to the name of the user
});

但我想从 Java 代码而不是 JavaScript 代码访问它。我怎样才能做到这一点?

标签: javaspring-bootspring-securityoauth-2.0

解决方案


如果您使用 Spring Security 默认值,则可以将Principal转换为UserDetails对象并可以访问用例所需的一切:

@GetMapping("/user")
public Principal user(Principal principal) {

  UserDetails userDetails = (UserDetails) principal;
  System.out.println(userDetails.getUsername());
  System.out.println(userDetails.getPassword());
  System.out.println(userDetails.getAuthorities());

  // do whatever you want ... 

  return principal;
}

更新:正如您提到的您使用 OAuth2,您可以执行以下操作来注入经过身份验证的 OAuth2 主体:

@GetMapping("/user")
public Principal user(@AuthenticationPrincipal OAuth2User principal) {

  // do whatever you want ... 

  return principal;
}

推荐阅读