2017-02-28 5 views
5

Spring(SpringBoot)アプリケーションでRestful APIとしてデータベースからデータを公開したいと考えています。 Spring Data Restはこのアクティビティの目的に合っているようです。Springデータの残り - サポートされている操作を制限する方法はありますか?

このデータベースは、アプリケーションのニーズに合わせて読み取り専用です。デフォルトでは、すべてのHTTPメソッドが提供されます。他のメソッドが公開されないように制限する(実際には防止する)ための設定がありますか? Hiding repository CRUD methodsの春のドキュメントから

+3

最も便利な方法は、Springセキュリティを使用してGETリクエスト以外のすべてをブロックすることです。 SDRはこの分野の機能を提供しています:http://docs.spring.io/spring-data/rest/docs/current/reference/html/#customizing-sdr.hiding-repository-crud-methods HTTPレベルでの処理Spring Securityを使用する方が簡単です。 –

答えて

12

16.2.3。あなたは CrudRepositoryに保存または削除する方法を公開したくない場合は、リポジトリCRUDメソッドに

を非表示にする、あなたはオフにするメソッドをオーバーライドして配置することにより、@RestResource(偽=エクスポートに) 設定を使用することができますオーバーライドされたバージョンの アノテーションたとえば、HTTP ユーザーがCrudRepositoryのdeleteメソッドを呼び出さないようにするには、すべて をオーバーライドし、オーバーライドされたメソッドにアノテーションを追加します。

@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 determingためやや素朴なアルゴリズムを使用して、あなたが削除メソッドの両方をオーバーライドすることが重要です。 現在IDの を取りますが、エンティティインスタンスを取得するバージョンはエクスポートされた状態のままにすることはできません。 の場合は、削除方法をエクスポートするかどうかを指定できます。 をオフにしたい場合は、 のバージョンにexported = falseの両方の注釈を付ける必要があります。 2018年のよう

+0

これを読んでいるなら、このチケットを投票することを考えなければなりません。 SDRは危険です。 https://jira.spring.io/browse/DATAREST-1034 – Snekse

関連する問題