Java 要从OAuth2.0访问用户电子邮件?

Java 要从OAuth2.0访问用户电子邮件?,java,spring-boot,spring-security,oauth-2.0,Java,Spring Boot,Spring Security,Oauth 2.0,我想从OAuth2.0访问登录用户的电子邮件地址。只是为了确保正确的用户有权登录 然后我需要使用以下代码: @RequestMapping("/user") public Principal user(Principal principal) { return principal; } 从JavaScript中调用: <div> Logged in as: <span id="user"></span> </div> $.ge

我想从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
});

以以下身份登录:
$.get(“/user”,函数(数据){//使用get请求调用Java代码
$(“#user”).html(data.userAuthentication.details.name);//将id=user设置为用户的名称
});

但我想从Java代码而不是JavaScript代码访问它。我该怎么做呢?

如果您使用Spring安全默认设置,您可以将
主体
强制转换为
用户详细信息
对象,并可以访问您的用例所需的所有内容:

@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;
}

但是当我调用方法user时。那么我应该有什么论据呢?或者我需要从Java it self执行HTTP get响应吗?如果客户机已经在Spring应用程序中进行了身份验证,那么您可以像已经进行身份验证一样插入
主体
,应用程序使用什么身份验证方法?BasicAuth/FormLogin/OAuth2/etc.?我使用的oathLogin()是'@RequestMapping(“/user”)'某种自动连线注入吗?