2012-08-01 2 views
5

カスタム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を表示しました。

私は本当にすべてのアイデアを拒否します。

+0

問題は発生しません。 BrandIdは常にヌルですか?それとも、リソースを保護しないのでしょうか?それとも、醜いAccessDeniedExceptionページですか? –

+0

BrandIDがnull –

答えて

1

正規表現を試すことができます。

あなたは春のセキュリティを使用している場合、あなたが3.1

は詳細についてはマニュアルを参照してください、あなたのhttp要素または要求マッチャー=「正規表現」に属性パス型=「正規表現」を追加する必要があります

+0

ですが、regexpはパス変数の参照用ではなくURLパターンを定義するためのものです。つまり、私は "/path/to/*.html"のようなことをするかもしれないので、パターンにマッチするすべてのURLを適用しますが、関心のあるものは "/ path/to/resource/{resourceId}"です。 access = "@ myService.mySecurityMethod(#resourceId)" –

1

変更あなたのpom.xml4.1.0.RELEASEに春のセキュリティバージョン:

<spring-security.version>4.1.0.RELEASE</spring-security.version> 

<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-web</artifactId> 
    <version>${spring-security.version}</version> 
</dependency> 

あなたはきれいにする必要があるかもしれませんその後のあなたのmavenプロジェクト。

(私は知っている、それは古い質問ですが、私は3年後に同じ問題に直面しました)。

+0

これはどのように質問に関連していますか? – tunix

関連する問題