如何使用 Keycloak 在 Spring Boot 中获取当前登录用户?

Posted

技术标签:

【中文标题】如何使用 Keycloak 在 Spring Boot 中获取当前登录用户?【英文标题】:How to get the current logged in user in Spring Boot with Keycloak? 【发布时间】:2020-09-05 06:53:27 【问题描述】:

我在 Spring Boot 中使用 Keycloak 保护了一个应用程序,我正在尝试获取当前登录用户的名称。

按照the answer of this question,我试过了:

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;
            );

但没有运气。它给了我一个关于未经检查的演员表的警告,但它不起作用!

如何让用户使用 Keycloak 登录?

【问题讨论】:

【参考方案1】:

仅使用 KeycloakPrincipal 类,给出警告

参数化类“KeycloakPrincipal”的原始使用

但它有效!

[...]
if (authentication.getPrincipal() instanceof KeycloakPrincipal) 
    KeycloakPrincipal principal = (KeycloakPrincipal) authentication.getPrincipal();
    return principal.getName();
[...]

【讨论】:

以上是关于如何使用 Keycloak 在 Spring Boot 中获取当前登录用户?的主要内容,如果未能解决你的问题,请参考以下文章

如何在基于 Keycloak/Spring 的应用程序中实现单点注销?

如何使用 Keycloak 在 Spring Boot 中获取当前登录用户?

如何在 Spring Boot 应用程序中使用 Keycloak Policy Enforcer

如何使用 Spring Boot 在 Keycloak 中设置 redirect_uri

如何将 Keycloak 与 Spring 集成(无引导)?

如何在嵌入式 Spring Boot Keycloak 中设置主题?