Add detailed logging and error handling to OIDC User Service

This commit is contained in:
Jan 2025-11-27 14:48:21 +01:00
parent 6974966891
commit 022ce8bd09

View file

@ -262,7 +262,12 @@ public class SecurityConfig {
final OidcUserService delegate = new OidcUserService(); final OidcUserService delegate = new OidcUserService();
return (userRequest) -> { return (userRequest) -> {
try {
log.info("=== OIDC User Service called ===");
OidcUser oidcUser = delegate.loadUser(userRequest); OidcUser oidcUser = delegate.loadUser(userRequest);
log.info("OIDC User loaded successfully");
Integer userId = null; Integer userId = null;
// Debug: Print all claims // Debug: Print all claims
@ -282,6 +287,8 @@ public class SecurityConfig {
String firstName = oidcUser.getAttribute(firstnameClaim); String firstName = oidcUser.getAttribute(firstnameClaim);
String lastName = oidcUser.getAttribute(lastNameClaim); String lastName = oidcUser.getAttribute(lastNameClaim);
log.info("Claims extracted - email: {}, workdayId: {}, firstName: {}, lastName: {}",
email, workdayId, firstName, lastName);
if (identifyBy.equals("email") && email != null && !email.isEmpty()) { if (identifyBy.equals("email") && email != null && !email.isEmpty()) {
log.debug("Fetch user by email {}", email); log.debug("Fetch user by email {}", email);
@ -293,14 +300,17 @@ public class SecurityConfig {
if (user != null) { if (user != null) {
userId = user.getId(); userId = user.getId();
log.info("User found with ID: {}", userId);
} else { } else {
if (email != null && firstName != null && lastName != null && (ignoreWorkdayClaim || workdayId != null)) { if (email != null && firstName != null && lastName != null && (ignoreWorkdayClaim || workdayId != null)) {
log.info("Creating new user");
var isFirstUser = userRepository.count() == 0; var isFirstUser = userRepository.count() == 0;
user = LccOidcUser.createDatabaseUser(email, firstName, lastName, ignoreWorkdayClaim ? generateRandomWorkdayId() : workdayId, isFirstUser); user = LccOidcUser.createDatabaseUser(email, firstName, lastName, ignoreWorkdayClaim ? generateRandomWorkdayId() : workdayId, isFirstUser);
userId = userRepository.update(user); userId = userRepository.update(user);
log.info("New user created with ID: {}", userId);
} else { } else {
log.debug("Unable to create user {} / {}", email, workdayId); log.warn("Unable to create user - email: {}, firstName: {}, lastName: {}, workdayId: {}",
email, firstName, lastName, workdayId);
mappedAuthorities.add(new SimpleGrantedAuthority("ROLE_NONE")); mappedAuthorities.add(new SimpleGrantedAuthority("ROLE_NONE"));
} }
} }
@ -310,6 +320,8 @@ public class SecurityConfig {
user.getGroups().forEach(group -> mappedAuthorities.add(new SimpleGrantedAuthority("ROLE_" + group.getName().toUpperCase()))); user.getGroups().forEach(group -> mappedAuthorities.add(new SimpleGrantedAuthority("ROLE_" + group.getName().toUpperCase())));
} }
log.info("=== OIDC User Service completed successfully ===");
return new LccOidcUser( return new LccOidcUser(
mappedAuthorities, mappedAuthorities,
oidcUser.getIdToken(), oidcUser.getIdToken(),
@ -317,6 +329,14 @@ public class SecurityConfig {
"preferred_username", "preferred_username",
userId userId
); );
} catch (Exception e) {
log.error("=== FATAL ERROR in oidcUserService ===", e);
log.error("Exception type: {}", e.getClass().getName());
log.error("Exception message: {}", e.getMessage());
log.error("Stack trace:", e);
throw e; // Re-throw to maintain Spring Security behavior
}
}; };
} }