4

I secured an application in Spring Boot using Keycloak and I'm trying to get the name of the current user logged in.

Following the answer of this question, I tried:

public Optional<String> getCurrentUserLogin() {

    SecurityContext securityContext = SecurityContextHolder.getContext();

    return Optional.ofNullable(securityContext.getAuthentication())
            .map(authentication -> {

                if (authentication.getPrincipal() instanceof KeycloakPrincipal) {
                    KeycloakPrincipal<KeycloakSecurityContext> kp = (KeycloakPrincipal<KeycloakSecurityContext>)  authentication.getPrincipal();
                            return kp.getKeycloakSecurityContext().getIdToken().getPreferredUsername();
                } 
                return null;
            });
}

but with no luck. It gives me a warning about the unchecked cast, and it doesn't work!

How can I get the user logged in using Keycloak?

HoRn
  • 1,458
  • 5
  • 20
  • 25
Kambei
  • 458
  • 9
  • 23

1 Answers1

3

Using class KeycloakPrincipal only, gives the warning

Raw use of parameterized class 'KeycloakPrincipal'

but it works!

[...]
if (authentication.getPrincipal() instanceof KeycloakPrincipal) {
    KeycloakPrincipal principal = (KeycloakPrincipal) authentication.getPrincipal();
    return principal.getName();
[...]
Kambei
  • 458
  • 9
  • 23