我正在关注https://spring.io/guides/tutorials/spring-boot-oauth2/,到目前为止一切正常。实际上,我什至设法将Google Oauth也作为第二个Auth提供程序。现在,我试图从后端的令牌信息端点中读取信息,以使其与本地数据库同步并调整输出。但是我在某种程度上努力检索信息。
本教程在某个时候创建了该端点:
@RequestMapping("/user")
public Principal user(Principal principal) {
return principal;
}
Run Code Online (Sandbox Code Playgroud)
当被调用时,这为我正确显示(成功登录后)
{
"authorities": [...],
"details": {...},
"authenticated": true,
"userAuthentication": {
"authorities": [...],
"details": {
"email": "foo@bar.com",
"name": "Foo Bar",
"id": "12345674890000"
},
"authenticated": true,
"principal": "12345674890000",
"credentials": "N/A",
"name": "12345674890000"
},
"oauth2Request": {},
"clientOnly": false,
"credentials": "",
"principal": "12345674890000",
"name": "12345674890000"
}
Run Code Online (Sandbox Code Playgroud)
因此,Spring Boot安全性可以某种方式获取正确的信息。现在,我正在尝试构建一个Interceptor(基本功能正常,在每个请求上都调用拦截器)来处理此信息。我正在努力获取例如电子邮件地址。我找到了这个答案,但它指的是Spring Boot的旧版本,并且只是链接到新的Interface,但是我想知道是否需要它(对于我认为的简单用例,它看起来也很复杂)。什么是/user在我的spring应用程序中从此端点获取信息而不实际调用我自己的端点来检索信息的最佳方法?
我唯一要领取的是通过SecurityContextHolderprincipal id和其他对我没有帮助的东西。我实际上没有检索到例如电子邮件地址。