Spring Boot中如何获取Google OAuth2授权后的用户信息?
Spring Boot Google OAuth2登录后用户信息的存储与获取
Spring Boot完成Google OAuth2授权登录后,用户信息并不会自动输出到某个固定位置,需要你主动获取并处理,核心存储和获取方式如下:
1. 用户信息的核心存储位置
登录成功后,用户的认证信息会被存入SecurityContextHolder的SecurityContext中,其中的Authentication对象包含了完整的用户数据。你可以通过getPrincipal()方法拿到OAuth2User实例,它的attributes集合里就是Google返回的所有用户信息(比如邮箱、姓名、头像地址等)。
2. 主动输出用户信息的几种方式
方式一:在接口中获取并打印
写一个接口,从上下文取出用户信息,直接输出到控制台或者返回给前端:
@GetMapping("/current-user") public void getCurrentUser() { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (auth.getPrincipal() instanceof OAuth2User) { OAuth2User oAuth2User = (OAuth2User) auth.getPrincipal(); // 输出到控制台 System.out.println("Google授权用户信息:" + oAuth2User.getAttributes()); } }
方式二:自定义OAuth2UserService拦截处理
通过重写DefaultOAuth2UserService的loadUser方法,在授权成功的第一时间获取并输出用户信息:
@Service public class CustomGoogleOAuth2UserService extends DefaultOAuth2UserService { @Override public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { OAuth2User user = super.loadUser(userRequest); // 这里可以直接打印用户信息 System.out.println("Google登录成功,用户信息:" + user.getAttributes()); return user; } }
3. 注意事项
- 默认情况下Spring Security不会自动打印用户信息,所有输出操作需要你主动编码实现。
- 返回的用户字段取决于你在Google OAuth2控制台配置的
scope(比如email、profile等权限),权限越多,返回的字段越完整。
内容的提问来源于stack exchange,提问作者Богдан Харашук
相关产品推荐
相关产品推荐

