spi-<spi-id>-<provider-id>-<property>=<value>
サーバーは拡張性を念頭に置いて構築されており、そのために、サーバーに特定の機能を提供するサービスプロバイダーインターフェース(SPI)を多数提供しています。このガイドでは、SPIとそのプロバイダーの設定に関するコアコンセプトについて理解します。
このガイドを読むことで、ここで説明する概念と手順を使用して、サーバー機能を拡張するために実装したプロバイダーを含め、任意のプロバイダーをインストール、アンインストール、有効化、無効化、および設定できるようになるはずです。
プロバイダーは、特定の設定形式を使用して設定できます。形式は次のとおりです。
spi-<spi-id>-<provider-id>-<property>=<value>
<spi-id>
は、設定するSPIの名前です。
<provider-id>
は、設定するプロバイダーのIDです。これは、対応するプロバイダーファクトリ実装に設定されたIDです。
<property>
は、特定のプロバイダーに設定するプロパティの実際の名前です。
これらの名前(spi、プロバイダー、およびプロパティの場合)はすべて小文字にする必要があり、myKeycloakProvider
のようにキャメルケースの名前の場合は、次のように大文字の前にダッシュ(-
)を含める必要があります:my-keycloak-provider
。
HttpClientSpi
SPIを例にとると、SPIの名前は connectionsHttpClient
であり、利用可能なプロバイダー実装の1つは default
という名前です。connectionPoolSize
プロパティを設定するには、次のような設定オプションを使用します。
spi-connections-http-client-default-connection-pool-size=10
プロバイダー設定オプションは、サーバーの起動時に提供されます。オプションのサポートされているすべての構成ソースと形式については、Keycloakの設定を参照してください。たとえば、コマンドラインオプションを使用する場合:
connections-http-client
SPIの default
プロバイダーに connection-pool-size
を設定するbin/kc.[sh|bat] start --spi-connections-http-client-default-connection-pool-size=10
SPIによっては、複数のプロバイダー実装が共存できますが、実行時に使用されるのはそのうちの1つだけです。これらのSPIの場合、特定のプロバイダーが、アクティブになり実行時に使用されるプライマリ実装です。
プロバイダーを単一プロバイダーとして設定するには、次のように build
コマンドを実行する必要があります。
email-template
SPIの単一プロバイダーとして mycustomprovider
プロバイダーをマークするbin/kc.[sh|bat] build --spi-email-template-provider=mycustomprovider
SPIによっては、複数のプロバイダー実装が共存でき、そのうちの1つがデフォルトで使用されます。これらのSPIの場合、特定のプロバイダーがデフォルトの実装であり、特定のプロバイダーが要求されない限り選択されます。
デフォルトプロバイダーを決定するために、次のロジックが使用されます。
明示的に設定されたデフォルトプロバイダー
順序が最も高いプロバイダー(順序 ⇐ 0 のプロバイダーは無視されます)
IDが default
に設定されたプロバイダー
プロバイダーをデフォルトプロバイダーとして設定するには、次のように build
コマンドを実行する必要があります。
password-hashing
SPIのデフォルトプロバイダーとして mycustomhash
プロバイダーをマークするbin/kc.[sh|bat] build --spi-password-hashing-provider-default=mycustomprovider
プロバイダーを有効または無効にするには、次のように build
コマンドを実行する必要があります。
bin/kc.[sh|bat] build --spi-email-template-mycustomprovider-enabled=true
プロバイダーを無効にするには、同じコマンドを使用し、enabled
プロパティを false
に設定します。
カスタムプロバイダーは、Javaアーカイブ(JAR)ファイルにパッケージ化し、ディストリビューションの providers
ディレクトリにコピーする必要があります。その後、JARファイルからの実装でサーバーのプロバイダーレジストリを更新するために、build
コマンドを実行する必要があります。
この手順は、サーバーの起動時または実行時にのみ検出されるのではなく、すべてのプロバイダーを事前に認識するようにサーバーランタイムを最適化するために必要です。
プロバイダーをアンインストールするには、providers
ディレクトリからJARファイルを削除し、再度 build
コマンドを実行する必要があります。