7.6. 設定方法
PropertyFileUserStorageProvider
の例は少々工夫されています。これは、プロバイダーの jar に組み込まれているプロパティーファイルにハードコーディングされているので、あまり便利ではありません。プロバイダーのインスタンスごとにこのファイルの場所を設定する場合があります。言い換えると、このプロバイダーを複数の異なるレルムで複数回再利用したり、全く異なるユーザープロパティーファイルを参照する場合などです。また、管理コンソール UI 内でこの設定を実行する必要があります。
UserStorageProviderFactory
には、プロバイダー設定を実装できる追加のメソッドがあります。プロバイダーごとに設定する変数を記述すると、管理コンソールは自動的に一般的な入力ページをレンダリングしてこの設定を収集します。実装されている場合、コールバックメソッドは、設定が保存される前、プロバイダーが初めて作成されるとき、および更新されるときにも検証を行います。UserStorageProviderFactory
は、org.keycloak.component.ComponentFactory
インターフェイスからこれらのメソッドを継承します。
ComponentFactory.getConfigProperties()
メソッドは、org.keycloak.provider.ProviderConfigProperty
インスタンスの一覧を返します。これらのインスタンスは、プロバイダーの各設定変数のレンダリングおよび保存に必要なメタデータを宣言します。
7.6.1. 設定例 リンクのコピーリンクがクリップボードにコピーされました!
PropertyFileUserStorageProviderFactory
の例を拡張して、プロバイダーインスタンスをディスク上の特定のファイルを指定できるようにします。
PropertyFileUserStorageProviderFactory
ProviderConfigurationBuilder
クラスは、設定プロパティーのリストを作成するためのヘルパークラスです。ここでは、String タイプである path
という名前の変数を指定します。このプロバイダーの管理コンソール設定ページでは、この設定変数は Path
としてラベル付けされ、デフォルト値は ${jboss.server.config.dir}/example-users.properties
です。この設定オプションのツールチップにカーソルを合わせると、ヘルプテキスト (File path to properties file (プロパティーファイルへのファイルパス)
) が表示されます。
次に、このファイルがディスクに存在することを確認します。有効なユーザープロパティーファイルを参照しない限り、レルムでこのプロバイダーのインスタンスを有効するべきではありません。これを実行するには、validateConfiguration()
メソッドを実装します。
validateConfiguration()
メソッドでは、ComponentModel
から設定変数を取得し、そのファイルがディスクに存在するかどうかを確認します。org.keycloak.common.util.EnvUtil.replace()
メソッドを使用することに注意してください。このメソッドでは、${}
が含まれる文字列がシステムプロパティーの値に置き換えられます。${jboss.server.config.dir}
文字列はサーバーの configuration/
ディレクトリーに対応し、この例では役に立ちます。
次に、古い init()
メソッドを削除します。ユーザープロパティーファイルはプロバイダーインスタンスごとに一意であるため、これを行います。このロジックは create()
メソッドに移動します。
全トランザクションでユーザープロパティーファイル全体をディスクから読み取るので、当然このロジックは効率的ではありませんが、今回の例で、設定変数をフックする方法をシンプルに説明できたかと思います。