[英]Spring Boot + Google OAuth2: how to define user details service?
[英]Spring Boot OAuth2: How to retrieve user token info details
我正在关注https://spring.io/guides/tutorials/spring-boot-oauth2/ ,到目前为止一切正常。 实际上,我甚至设法将Google Oauth作为第二个Auth提供商。 现在,我正在尝试从后端的令牌信息端点读出信息,以将其与我的本地数据库同步并调整输出。 但我在某种程度上努力检索信息。
本教程在某个时刻创建了这个端点:
@RequestMapping("/user")
public Principal user(Principal principal) {
return principal;
}
在调用时,这对我来说正确显示(成功登录后)
{
"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"
}
因此,春季启动安全性正在获取正确的信息。 现在我正在尝试构建一个Interceptor
(基本功能正在工作,每个请求都会调用拦截器)来处理这些信息。 我现在很难得到例如电子邮件地址。 我找到了这个答案,但它指的是旧版本的spring boot,只是链接到一个新的界面,但我想知道我是否需要它(对于我认为我有的简单用例,它看起来也很复杂)。 在我的spring应用程序中从此/user
端点获取信息而不实际调用我自己的端点来检索它的最佳方法是什么?
我设法拿起的唯一东西是通过SecurityContextHolder
原则id和其他没有帮助我的东西。 我实际上没有检索例如电子邮件地址。
尝试使用SecurityContext:
SecurityContextHolder.getContext().getAuthentication().getPrincipal();
它将包含当前登录的真实用户对象
这可能有所帮助
我假设你知道用户和角色映射。 我的User类扩展了UserDetails,所以我需要覆盖下面提到的一些方法
Collection<? extends GrantedAuthority> getAuthorities();
String getPassword();
String getUsername();
boolean isAccountNonExpired();
boolean isAccountNonLocked();
boolean isCredentialsNonExpired();
boolean isEnabled();
然后调用SecurityContextHolder.getContext()。getAuthentication()有助于返回User对象,如下所示
User user = null;
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null
&& authentication.getPrincipal() != null
&& authentication.getPrincipal() instanceof User) {
user = (User) authentication.getPrincipal();
}
现在在用户对象中,如果映射完美,您将从User表中获取所有信息。 像用户名,电子邮件,名字,姓氏等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.