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>
<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など)。将来的に非推奨となる可能性があるため、この方法で独自のプロバイダーを実装することはお勧めできません。