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