Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Single sign on 如何在KeyClope中初始化多个用户提供程序_Single Sign On_Keycloak_Keycloak Services - Fatal编程技术网

Single sign on 如何在KeyClope中初始化多个用户提供程序

Single sign on 如何在KeyClope中初始化多个用户提供程序,single-sign-on,keycloak,keycloak-services,Single Sign On,Keycloak,Keycloak Services,当我试图使keydeport使用在keydeport(包:org.keydeport.models.JPA.JpaUserProviderFactory)中实现的默认JPA提供程序时,遇到了很大的困难 还有我的自定义用户提供者 我的用户提供程序的实现方式如下: public class MyCustomUserProviderFactory extends JpaUserProviderFactory { @Override public String getId() { ret

当我试图使keydeport使用在keydeport(包:org.keydeport.models.JPA.JpaUserProviderFactory)中实现的默认JPA提供程序时,遇到了很大的困难 还有我的自定义用户提供者

我的用户提供程序的实现方式如下:

public class MyCustomUserProviderFactory extends JpaUserProviderFactory {
  @Override
  public String getId() {
    return "demo";
  }

  @Override
  public UserProvider create(KeycloakSession session) {
    EntityManager em = session.getProvider(JpaConnectionProvider.class).getEntityManager();
    return new MyCustomUserProvider(session, em);
  }
}
和MyCustomUserProvider

public class MyCustomUserProvider extends JpaUserProvider {
  private final KeycloakSession session;

  public MyCustomUserProvider(KeycloakSession session, EntityManager em) {
    super(session, em);
    this.session = session;
  }

}
startup.cli

/subsystem=keycloak-server/spi=user:add(default-provider=demo)
/subsystem=keycloak-server/spi=user/provider=jpa:add(enabled=true)
/subsystem=keycloak-server/spi=user/provider=demo:add(enabled=true)
我也有META-INF/service

org.keydape.models.UserProviderFactory

使用com.demo.keydrope.providers.user.MyCustomUserProviderFactory

因此,通过这个实现和设置,keydepot成功启动,但是当我需要访问demo和jpa UserProvider时,我只会得到默认的provider,在这个示例中就是demo

我通过以下方式访问UserProvider:

UserProvider demoProvider = session.getProvider(UserProvider.class, "demo");
但如果我执行

UserProvider jpaProvider = session.getProvider(UserProvider.class, "jpa");
我只得到空值。 如果我在startup.cli(default provider=demo)中更改默认提供程序,那么我将获得jpa,而不是demo提供程序


有人能向我解释一下,我怎么能有几个UserProvider实现,我怎么能访问它们?

你确定更改应用于standalone.xml吗?我没有standalone.xml,我有一些模块,在这些模块中实现了提供程序,并且模块在wildfly上作为jar部署。此更改应用于KeyClope,但似乎您不能有多个用户提供程序。通常,您可以定义多个提供程序。似乎您的startup cli provider语句总是在它之前被压碎。当您说cli语句被压碎是什么意思?一切都正常运行,keydove正在工作,但是当我想要访问这两个提供者时,我只能访问默认的提供者,而另一个提供者不存在,并且在我看来,它并没有被keydove实例化。