Ich habe eine Methode, die eig. eine Exception fangen soll:
Allerdings erhalte ich dennoch diese Error Message:
Was mache ich hier falsch?
Java:
import jakarta.ws.rs.NotAuthorizedException;
import jakarta.ws.rs.ProcessingException;
/**
* Hat der User ein Social Login
*/
public void doCheckSocialLogin(String username) {
LOGGER.info("START doCheckSocialLogin");
try {
hasSocialLogin = keycloakServiceBean.hasSocialLogin(username);
}
catch (ApplicationExternalProviderNotFoundException e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Etwas stimmt in der Keycloak Einstellung nicht. Bitte externe Provider prüfen!", ""));
}
catch (ProcessingException e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Etwas stimmt in der Keycloak Einstellung nicht. Bitte externe Provider prüfen!", ""));
}
catch (NotAuthorizedException e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Etwas stimmt in der Keycloak Einstellung nicht. Bitte externe Provider prüfen!", ""));
}
catch (Exception e) {
}
LOGGER.info("END doCheckSocialLogin");
}
Code:
/**
* Hat der User ein Social Login (Facebook, Google..)
*
* @throws ApplicationExternalProviderNotFoundException
* @throws EntityObjectHelperNotFoundException
* @throws JsonProcessingException
* @throws JsonMappingException
*
*/
public boolean hasSocialLogin(String username) throws JsonMappingException, JsonProcessingException,
EntityObjectHelperNotFoundException, ApplicationExternalProviderNotFoundException {
LOGGER.debug("START hasSocialLogin");
KeycloakLogin keycloakLogin = login();
boolean result = KeycloakAPICall.hasSocialLogin(keycloakLogin.getKeycloak(), keycloakLogin.getRealmName(),
username);
LOGGER.debug("END hasSocialLogin");
return result;
}
Code:
/**
* Prüfen, ob der User ein Social Login hat
*
* @param usersResource
* @param user
* @return
*/
public static boolean hasSocialLogin(Keycloak keycloak, String realmName, String emailAddress) {
LOGGER.info("START hasSocialLogin");
// Benutzerressource abrufen
UsersResource usersResource = keycloak.realm(realmName).users();
// Interne ID von User erhalten
String userId = usersResource.list().stream().filter(user -> user.getUsername().equals(emailAddress))
.findFirst().map(UserRepresentation::getId).orElseThrow();
UserRepresentation user = usersResource.get(userId).toRepresentation();
// Durchsuchen Sie die Authentifizierungsmethoden des Benutzers
boolean result = hasSocialLogin(user);
return result;
}
Code:
/**
* Prüfen, ob der User ein Social Login hat
*
* @param usersResource
* @param user
* @return
*/
private static boolean hasSocialLogin(UserRepresentation user) {
LOGGER.info("START hasSocialLogin");
boolean hasIdentityProviderLinks = false;
List<FederatedIdentityRepresentation> userIdentityProviderResource = user.getFederatedIdentities();
if (userIdentityProviderResource == null || userIdentityProviderResource.isEmpty())
return false;
for (FederatedIdentityRepresentation federatedIdentityRepresentation : userIdentityProviderResource) {
if (federatedIdentityRepresentation != null) {
hasIdentityProviderLinks = true;
break;
}
}
if (hasIdentityProviderLinks) {
return true;
} else {
return false;
}
}
Allerdings erhalte ich dennoch diese Error Message:
Code:
Caused by: jakarta.ws.rs.ProcessingException: jakarta.ws.rs.NotAuthorizedException: HTTP 401 Unauthorized
at org.jboss.resteasy.resteasy-client@6.2.7.Final//org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.filterRequest(ClientInvocation.java:652)
Was mache ich hier falsch?