web-dev-qa-db-ja.com

Spring data rest-サポートされている操作を制限する方法はありますか?

Spring(SpringBoot)アプリケーションでデータベースからのデータをRestful APIとして公開したい。 Spring Data Restは、このアクティビティの目的にぴったり合っているようです。

このデータベースは、私のアプリケーションのニーズに対して読み取り専用です。デフォルトでは、すべてのHTTPメソッドが提供されます。他のメソッドの公開を制限する(実際には防ぐ)ために使用できる構成はありますか?

15
Manglu

Spring docsからリポジトリCRUDメソッドを隠す

16.2.3。リポジトリのCRUDメソッドを非表示にする

CrudRepositoryで保存または削除メソッドを公開したくない場合は、オフにするメソッドをオーバーライドして@RestResource(exported = false)設定を使用し、オーバーライドされたバージョンにアノテーションを配置できます。たとえば、HTTPユーザーがCrudRepositoryの削除メソッドを呼び出せないようにするには、それらすべてをオーバーライドし、オーバーライドされたメソッドに注釈を追加します。

@RepositoryRestResource(path = "people", rel = "people")
interface PersonRepository extends CrudRepository<Person, Long> {

  @Override
  @RestResource(exported = false)
  void delete(Long id);

  @Override
  @RestResource(exported = false)
  void delete(Person entity);
}

エクスポーターは現在、実行時のパフォーマンスを向上させるために、使用するCRUDメソッドを決定するためにいくぶん素朴なアルゴリズムを使用しているため、両方の削除メソッドをオーバーライドすることが重要です。現在、IDを取得する削除のバージョンをオフにして、エンティティインスタンスを取得するバージョンをエクスポートしたままにすることはできません。当面は、deleteメソッドをエクスポートするかどうかを選択できます。それらをオフにしたい場合は、両方のバージョンにexported = falseの注釈を付ける必要があることに注意してください。

26

2018年の初めから、公開用に明示的に宣言されたリポジトリメソッドのみを公開する 機能がありますDATAREST-1176

RepositoryRestConfiguration を参照してください

タイプレベルでの エクスポートfalseは、メソッドレベルでのエクスポートtrueによるオーバーライドを許可しません チケット(DATAREST-1034)が開か​​れましたが、複製として閉じられました/ DATAREST-1176。 Oliver Gierke氏は次のように述べています。

DATAREST-1176のバージョンに対して修正されたものとして、これを解決しますが、他に必要な場合があれば、自由に再開してください。

これらは正確な複製ではなく、1034で説明されている機能はよりユーザーフレンドリーでしたが、現在は少なくともいくつかのオプションがあります。

10
Snekse