1

次のようなURLを保護する方法を探していました

@RequestMapping("/owners/{ownerId}/pets/new")

ユーザー (役割ではない) レベル、つまり ID {ownerId} を持つ所有者のみがアクセスできます。さらに、RESTfulな設計を含めて保護したい。所有者レベルで動的に JSON サービスへの非同期アクセス。

私の質問:

  1. これは Spring Security でどのように行うのが最適ですか?
  2. /owners/{ownerId}/pets/new が非同期リクエスト経由でアクセスされた場合、これはどのように行われますか?
  3. iPhoneアプリなどのサードパーティアプリから上記のURIにアクセスするにはどうすればよいですか?
  4. サンプル/参照アプリケーション/記事はありますか?

ありがとう

4

2 に答える 2

2

@PreAuthorizeを使用します。次のようなSpring-EL式を使用できます

@RequestMapping("/owners/{ownerId}/pets/new")
@PreAuthorize("#ownerId == principal.id)")
public void doSomething(@RequestParam Number ownerId);

上記のコードは代表的なものにすぎません。一部の詳細は、実装によって異なります。

詳細はこちらをご覧ください

于 2010-07-26T02:54:14.950 に答える
1

あなたの質問1に関して、私が考えることができる最も簡単なアプローチは、コントローラーメソッド内で、最初にIDに基づいてユーザー認証を確認できることです。UserDetails は SpringSecurityContext からアクセスでき、そこから現在ログインしているユーザーの ID を取得できます。リクエスト URL から取得した ID は、パス変数としてもアクセスできます。これら 2 つが一致しない場合は、単純に AccessDeniedException のような例外をスローできます。このロジックを、すべてのコントローラのスーパークラスとして機能する BaseController のメソッドに移動すると、同様のチェックのためにすべてのコントローラ メソッドで同じメソッドを使用できます。

于 2010-07-25T08:31:18.393 に答える