3

Spring MVCで実装され、一連のリソースを公開するRESTfulサービスがいくつかあります。私はすでにHTTPBasicAuthenticationとHTTPSに基づく認証を使用しています。一部のリソースには、一部のユーザーのみがアクセスできる必要があります。

たとえば、URI内のすべてのサブリソースに/users/{userid}/photosユーザーだけがアクセスできるようにしたいuserid。実際、私のアプリケーションでは、認証されたすべてのユーザーがアクセスできます。どうすれば他のユーザーからそれらを保護できますuseridか?useridまた、このリソースへのアクセスをユーザーのサブセット(たとえば、の友人など)にのみ許可したい場合はどうすればよいですか?

4

4 に答える 4

5

あなたはあなたの方法でこのようなことをすることができます:

    @ResponseBody
    @RequestMapping(value = "/users/{userid}/photos", method = RequestMethod.GET)
    @Secured(value = {"userid"})
    public ResponseEntity<ModelMap> getPhotos(....) throws Exception {

将来必要に応じて、実行するだけでさらにユーザーを追加できます

    @Secured(value = {"ROLE_ADMIN", "userid"})
于 2013-01-10T14:37:59.693 に答える
1

カスタムセキュリティ式を使用できます。

<security:intercept-url pattern="/users/{userid}/photos" access="getUserIdUrlPathParameter() == principal.userId"/>

その方法については、この投稿を参照してください。

于 2013-01-10T14:41:36.470 に答える
0

SpringSecurityを使用することを強くお勧めします。Springセキュリティを使用すると、特定のURLエンドポイントへのアクセスを特定の役割を所有するプリンシパルに制限できます。

春のセキュリティインターセプトURLの役割を参照してください

JSR-250アノテーションを使用することもできます。http://forum.springsource.org/showthread.php?126395-How-to-secure-Spring-MVC-controllers-using-Spring-Security-annotationsを参照してください。

-

URL / resource/{user}をその特定のユーザーに制限する必要はないと思います。セキュリティコンテキストからユーザー名を差し引いて、URLを偽造して特定の使用名を誰かに挿入させないようにする必要があります...

于 2013-01-10T14:30:56.203 に答える
0

@PreAuthorize("authentication.name == #userId")提案されたものの代わりに、@Secured(value = {"userid"})または@Secured(value = {"#userid"})提案されたように、機能していなかったものを使用して問題を解決しました。

<security:global-method-security pre-post-annotations="enabled"/>サーブレットコンテキスト構成ファイルに追加する必要があることに注意してください。

于 2013-01-21T12:07:11.353 に答える