Чтобы получить доступ к электронной почте пользователя от OAuth2.0? - PullRequest
0 голосов
/ 18 марта 2020

Я хочу получить доступ к адресу электронной почты зарегистрированного пользователя из 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 кода. Как я могу это сделать?

1 Ответ

1 голос
/ 18 марта 2020

Если вы используете значения по умолчанию 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;
}
...