5.2. 利用可能なプロバイダーの利用
プロバイダーの実装では、Red Hat build of Keycloak で利用可能な他のプロバイダーを使用できます。既存のプロバイダーは通常、KeycloakSession
を使用して取得できます。これは、セクション SPI の実装 で説明されているように、プロバイダーで利用できます。
Red Hat build of Keycloak には 2 つのプロバイダータイプがあります。
単一実装のプロバイダータイプ - Red Hat build of Keycloak ランタイムで、1 つのプロバイダータイプのみアクティブに実装できます。
たとえば
HostnameProvider
は、Red Hat build of Keycloak で使用されるホスト名を指定し、そのホスト名が Red Hat build of Keycloak サーバー全体で共有されます。そのため、Red Hat build of Keycloak サーバーでアクティブになるこのプロバイダーの実装は 1 つだけです。サーバーランタイムに複数のプロバイダー実装が利用できる場合は、それらのいずれかをデフォルトとして指定する必要があります。
たとえば、以下のようなものです。
bin/kc.[sh|bat] build --spi-hostname-provider=default
default-provider
の値として使用される default
は、特定のプロバイダーファクトリー実装の ProviderFactory.getId()
が返す ID と一致する必要があります。コードでは、keycloakSession.getProvider(HostnameProvider.class)
のようにプロバイダーを取得します。
複数実装のプロバイダータイプ - Red Hat build of Keycloak ランタイムで複数の実装を利用し、一緒に動作させることができるプロバイダータイプです。
たとえば、
EventListener
プロバイダーは、利用可能で登録された複数の実装を持つことができます。これは、特定のイベントがすべてのリスナー (jboss-logging、sysout など) に送信できることを意味します。コードでは、たとえばsession.getProvider(EventListener.class, "jboss-logging")
のように、プロバイダーの指定したインスタンスを取得することができます。前述のように、このプロバイダータイプのインスタンスは複数存在する可能性があるため、第 2 引数にプロバイダーのprovider_id
を指定する必要があります。プロバイダー ID は、特定のプロバイダーファクトリー実装の
ProviderFactory.getId()
が返す ID と一致する必要があります。プロバイダーの種類によっては、第 2 引数にComponentModel
を指定することで取得できるものもありますし、KeycloakSessionFactory
を指定しなければならないものもあります (Authenticator
など)。将来的に非推奨となる可能性があるため、この方法で独自のプロバイダーを実装することは推奨できません。