我正在尝试将Google登录信息集成到我的Spring Boot应用程序中。我试图通过Google注册/登录新用户,因此像许多教程中一样,我实现了自己的OidcService。但是问题在于,无论我尝试使用自定义OidcService实现如何,都不会被调用。请帮忙。谢谢
我的SecurityConfig看起来像这样:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.
csrf().disable().
authorizeRequests().
antMatchers("/auth/register","/auth/login").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login()
.redirectionEndpoint()
.baseUri("/oauth2/callback/*")
.and()
.userInfoEndpoint()
.oidcUserService(oidcUserService)
.and()
.authorizationEndpoint()
.baseUri("/oauth2/authorize")
.authorizationRequestRepository(customAuthorizationRequestRepository())
.and()
.failureHandler(oAuth2AuthenticationFailureHandler);
}
这是我的OidcService:
@服务 公共类CustomOidcUserService扩展了OidcUserService {
private final UserRepository userRepository;
public CustomOidcUserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public OidcUser loadUser(OidcUserRequest userRequest) throws OAuth2AuthenticationException {
System.out.println("TU");
OidcUser oidcUser = super.loadUser(userRequest);
Map<String,Object> attributes = oidcUser.getattributes();
GoogleOAuth2UserInfo userInfo = new GoogleOAuth2UserInfo(attributes);
updateUser(userInfo);
return oidcUser;
}
private void updateUser(GoogleOAuth2UserInfo userInfo) {
Optional<User> user = userRepository.findByEmail(userInfo.getEmail());
if (user.isPresent()) {
user.get().setEmail(userInfo.getEmail());
user.get().setfirstName(userInfo.getName().split(" ")[0]);
user.get().setSurName(userInfo.getName().split(" ")[1]);
userRepository.save(user.get());
} else {
User newUser = new User(userInfo.getName().split(" ")[0],userInfo.getName().split(" ")[1],userInfo.getEmail(),"");
userRepository.save(newUser);
}
}
}