java - 在使用 Keycloak 保护的网络应用程序中获取登录用户名

标签 java jboss ejb keycloak

我已经使用基于 wildfly 的标准 Keycloak 适配器通过 Keycloak 保护了一个企业应用程序。我面临的问题是调用其余 Web 服务时需要知道当前登录的用户名。如何从 Keycloak 获取登录用户信息?

我尝试使用 SecurityContextWebListener 等。但是它们都无法提供所需的详细信息。

最佳答案

您从安全上下文中获取所有用户信息。

例子:

public class Greeter {

  @Context
  SecurityContext sc;

  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public String sayHello() {

    // this will set the user id as userName
    String userName = sc.getUserPrincipal().getName();

    if (sc.getUserPrincipal() instanceof KeycloakPrincipal) {
      KeycloakPrincipal<KeycloakSecurityContext> kp = (KeycloakPrincipal<KeycloakSecurityContext>)  sc.getUserPrincipal();

      // this is how to get the real userName (or rather the login name)
      userName = kp.getKeycloakSecurityContext().getIdToken().getPreferredUsername();
    }

    return "{ message : \"Hello " + userName + "\" }";
}

要传播安全上下文,您必须按照以下说明配置安全域: JBoss/Wildfly Adapter configuration

关于java - 在使用 Keycloak 保护的网络应用程序中获取登录用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31864062/

相关文章:

java - 使用 Xuggler 从 mp4 创建 mp3

java - struts2中同一个 Action 的两个方法?

JBoss JMS远程队列?

java - Tomcat + Jboss 编码错误

java - 配置 Hibernate 以使用 JPA 风格的配置,而无需进入 EE

jakarta-ee - JCache (JSR-107) 与 Singleton EJB

Rest EJB 项目未部署在 Wildfly 8.0 上

java - 我可以将 GWT 应用程序与普通的 Java 应用程序一起编写吗?

java - LibGdx RAM 使用量持续增加

java - 由于版本差异,jboss 中出现 log4j 错误