2016-07-13 5 views
4

汎用ユースケースのRESTfulサービスを定義する正しい方法を知りたいと思います。REST - ユーザーIDの送信とプリンシパルからのユーザーIDの受信

現在のユーザーのプロファイルを更新するためのRESTful APIを作成しています。リクエスト内で現在のユーザーのIDを送信する必要がありますか?これは、ユーザーが自分の詳細を編集できるように、サーバー側で検証する必要があります。だから私はユーザーIDとプリンシパルオブジェクトのチェックを追加する必要があります。また、クライアント側では現在のユーザーIDをどこかに保持する必要があります。

POST /user/{id} 

また、ユーザーIDの送信をスキップして、プリンシパルオブジェクトからユーザーの詳細を取得することもできます。私たちが知っているように、ステートレスセキュア APIのようなものはありません。正しいアプローチでしょうか?

私は、最初のアプローチで必要とされているように、現在のユーザーを私のために検証する機能をSpringに認識していません。それが存在する場合は、私に知らせてください。

答えて

2

他のユーザーを更新する権限を持つ管理者が更新を送信する場合を考えてみましょう。この場合は、POST /user/{id}になります。これは普通のユーザーの場合であってはならない理由はありません。

スプリングセキュリティでは、コントローラーメソッドで@PreAuthorize式を使用できます。それは次のようになります:

@PostMapping("/user/{id}") 
@PreAuthorize("hasRole('ADMIN') || (principal.id == #id)") 
public User updateUser(@RequestBody User newInfo, @PathVariable Long id) { 
    ... 
} 
関連する問題