Skip to content

OIDC snippets

@Component
@Slf4j
public class OAuth2SuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {

    AppUserRepo userRepository; // app secific user repo

    public OAuth2SuccessHandler(AppUserRepo userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,
            HttpServletResponse response,
            Authentication authentication) throws IOException, ServletException {


        log.info("OAuth2SuccessHandler called");
        OidcUser oauthUser = (OidcUser) authentication.getPrincipal();
        Optional<AppUser> user = userRepository.findByEmail(oauthUser.getEmail());

        if (user.isEmpty()) {
            AppUser newUser = AppUser.builder() // app specific user
                    .email(oauthUser.getEmail())
                    .firstName(oauthUser.getGivenName())
                    .lastName(oauthUser.getFamilyName())
                    .fullName(oauthUser.getFullName())
                    .build();

            AppUser saved = userRepository.save(newUser);
            log.info("Saved user id={}", saved.getEmail());
        } else {
            log.info("User exists: {}", user.isPresent());
        }
        super.onAuthenticationSuccess(request, response, authentication);
    }
}