6

カスタム URL パラメータ (パス変数) に基づいてセキュリティ ルールを作成したいと考えています。例では。Brand1 と Brand2 というリソースへの管理者アクセス権はあるが、Brand3 というリソースへのアクセス権を持たないユーザーが必要だとします。次のリンクを使用してリソースを編集する場合があります。

http://myapp/brand/edit/1
http://myapp/brand/edit/2
http://myapp/brand/edit/3

今、セキュリティのコンテキストで私はそのようなことをしたいと思います

 <security:intercept-url pattern="/brand/edit/{brandId}" 
           access="hasRole('ROLE_ADMIN') or
                   @authorizationService.hasBrandPermission(
                   #brandId, principal.username)"/>

私が得る唯一のものはユーザー名です。BrandId は常に null です。以前は @PreAuthorize でそれを行っていましたが、機能しましたが、すべてのコントローラー クラスに分散するのではなく、単一の xml ファイルにセキュリティ構成を集中化したいと考えています。さらに、@PreAuthorize を使用していたとき、アクセス拒否ハンドラーは拒否されたページにリダイレクトせず、醜い AccessDeniedException を insead に表示しました。

どんなアイデアでも本当に感謝します。

4

2 に答える 2

1

正規表現を使ってみることができます。

Spring Security 3.1を使用している場合は、http要素に属性path-type = "regex"を追加するか、 request-matcher="regex"を追加する必要があります。

詳細については、ドキュメントを参照してください

于 2012-08-01T14:43:02.087 に答える