次にすべきことは、このファイルがディスク上に存在することを確認することです。有効なユーザー・プロパティー・ファイルを指していない限り、レルム内でこのプロバイダーのインスタンスを有効にしたくありません。メソッドを実装します。設定変数を取得し、そのファイルがディスク上に存在するかどうかを確認します。メソッドを使用していることに注意してください。含まれる文字列がシステム・プロパティー値で置換されます。ディレクトリーに対応しており、このサンプルでは非常に便利です。これを行う理由は、ユーザー・プロパティー・ファイルがプロバイダー・インスタンス毎に独自のものになるからです。}このロジックは、すべてのトランザクションがディスクからユーザー・プロパティー・ファイル全体を読み込むので、もちろん非効率ですが、設定変数にフックする簡単な方法を示しているはずです。管理コンソールでのプロバイダー設定これで、設定ができるようになりました。変数を設定することができます。設定されたプロバイダーユーザーの追加/削除およびクエリーのケイパビリティー・インターフェイスこれまでのサンプルで行っていないことの1つは、ユーザーの追加と削除やパスワードの変更をできるようにすることです。これまでのサンプルで定義されたユーザーは、管理コンソールで照会することも表示することもできません。インターフェイスを実装する必要があります。UserRegistrationProviderの実装この手順を使用して、特定のストアに対するユーザーの追加と削除を実装するためには、まずプロパティー・ファイルをディスクに保存できるようにする必要があります。メソッドの実装は単純になります。設定することに注意してください。これは、プロパティー値をnullにすることができないためです。メソッドを変更する必要もあります。メソッドが呼び出されます。返すことで、このプロバイダーをスキップして、次を呼び出すようにできます。}これでプロパティー・ファイルを保存できるようになったので、パスワードも更新できるようになります。}また、パスワードを無効にすることができます。}これらのメソッドを実装すると、管理コンソールでユーザーのパスワードの変更や無効化ができるようになります。実装しなければ、管理コンソールはサンプル・プロバイダーによってロードされたユーザーを表示および管理できません。このインターフェイスの実装を見てみましょう。委譲してユーザーをロードします。パラメーターに基づいてこの呼び出しにインデックスを付けることに注目してください。外部ストアがページネーションをサポートしていない場合は、同様のロジックを実行する必要があります。パラメーターを受け取ります。これは、ユーザー名と電子メールの属性を検索してユーザーを見つけるために使用する文字列です。メソッドを使用しています。メソッドは、姓、名、電子メールに基づいてユーザーを検索できます。ユーザー名のみを保存するので、ユーザー名に基づいて検索します。処理を委譲しています。}グループや属性は保存しないので、他のメソッドは空のリストを返します。サンプルは実際には限定されています。プロパティー・ファイルに保存されているユーザーでログインすることはできますが、他のことはあまりできません。このプロバイダーによってロードされたユーザーが、特定のアプリケーションに完全にアクセスするための特殊なロールまたはグループ・マッピングを必要とする場合、これらのユーザーにロールマッピングを追加する方法はありません。電子メール、姓名などの重要な属性を変更または追加することもできません。このような状況の場合、KeycloakはKeycloakのデータベースに追加の情報を保存することで、外部ストアを拡張することができます。クラス内にカプセル化されています。メソッドで利用できます。これには、属性、グループとロールマッピング、異なるクレデンシャル・タイプ、および必須アクションを保存するためのすべての種類のメソッドがあります。外部ストアのデータモデルが完全なKeycloakの機能セットをサポートできない場合、このサービスはそのギャップを埋めることができます。外部ストレージ表現に委譲するため、オーバーライドする必要があるメソッドはオーバーライドします。このクラスは、オーバーライドしてもよい、より小さなprotectedのメソッドを持っているため、Javadocを読むことを強くお勧めします。グループ・メンバーシップとロールマッピングのあたりを読んでください。使うためにプロバイダーに簡単な変更が必要です。匿名クラスの実装を定義します。メソッドはプロパティー・ファイルを変更して保存します。インポート実装による方法ユーザー・ストレージ・プロバイダーを実装する場合、選択可能な別の方法がもう1つあります。ユーザー・フェデレーティッド・ストレージを使用せずに、ローカルのKeycloakの組み込みユーザー・データベース内でユーザーを作成し、外部のストアからこのローカルコピーに属性をコピーすることができます。このアプローチにはたくさんの利点があります。Keycloakは、基本的に外部ユーザーストア用の永続的なユーザー・キャッシュになります。ユーザーがインポートされると、外部ストアにヒットすることはなくなり、その負荷が取り除かれます。公式のユーザーストアをKeycloakにし、従来の外部ストアは廃止する場合、アプリケーションを徐々に移行してKeycloakを使用することができます。すべてのアプリケーションが移行されたら、インポートされたユーザーのリンクを解除し、従来のレガシー外部ストアは廃止します。インポートによる方法の使用には明らかな欠点がいくつかあります。初回のユーザーの検索では、Keycloakのデータベースを複数回更新する必要があります。これは大きなパフォーマンス低下を招き、Keycloakのデータベースに多くの負担をかけることになります。ユーザー・フェデレーティッド・ストレージのアプローチでは、必要に応じて追加のデータのみが保存されるだけであり、外部ストアの機能によってはまったく使用されない可能性もあります。インポートのアプローチでは、ローカルのKeycloakストレージと外部ストレージを同期させておく必要があります。ユーザー・ストレージSPIには、同期をサポートできるために実装できるケーパビリティー・インターフェイスがありますが、これはすぐにやっかいで面倒なものになります。インポートによる方法を実装する場合は、ユーザーがローカルにインポートされているかどうかを初回のみ確認します。インポートされている場合は、ローカルユーザーを返します。インポートされていない場合は、ユーザーをローカルで作成して外部ストアからデータをインポートします。ほとんどの変更が自動的に同期されるように、ローカルユーザーをプロキシーすることもできます。拡張してこのアプローチをとることができます。メソッドを変更することからはじめます。メソッドを呼び出し、ローカルのKeycloakユーザー・ストレージへの参照を取得します。ユーザーがローカルで保存されたかどうかを確認し、保存されていない場合はローカルにユーザーを追加します。設定しないでください。IDを渡すことにも注意してください。これにより、プロバイダーとインポートされたユーザーの間でリンクが設定されます。ユーザー・ストレージ・プロバイダーが削除されると、それによりインポートされたユーザーもすべて削除されます。呼び出す目的の1つです。インターフェイスから実装されているメソッドに委譲されることです。返ると、Keycloakは、ローカル・ストレージを使用して検証または更新できるかどうかを確認します。クラスを使用しているローカルユーザーをプロキシーしている点にも注意してください。