java - 从 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 代码访问它。我怎样才能做到这一点?
解决方案
如果您使用 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;
}
推荐阅读
- c++ - 我的输出总是相同的,但我应该根据我在“efektywnosctypu”中插入的数字给出不同的答案
- ocaml - Ocaml hacl-star-raw 软件包:安装失败
- rust - std::process,带有来自缓冲区的标准输入和标准输出
- java - 如何在 Spring Boot 中从 RestTemplate 或 WebClient 获取二进制数据?
- firebase - 使用 Firebase 库在 Android Studio 中生成 JavaDoc
- python - 缺少 1 个必需的位置参数:'self'
- kdb - 如何编写使用 KDB 查询中的列的函数?
- php - 连接表上的 DISTINCT 和 RND()
- c++ - tbb::concurrent_multiset/concurrent_set 在使用 unsafe_erase() 擦除 begin() 时崩溃
- java - 限制gradle中的依赖范围