2012-02-11 8 views
3

私は春のセキュリティでセキュリティ注釈を設定しようとしています。しかし、私はこのことについて疑問がある -春のセキュリティで保護された注釈

.... 
<security:http auto-config="true" use-expressions="true"> 
.... 

を、私は

@Secured("CUSTOM_ACCESS") 
public String query(); 

を使用する場合、それは動作しません。しかし、私は

@PreAuthorize("hasRole('CUSTOM_ACCESS')") 
public String query(); 

を正しく使用し、関連する役割を適用します。これは@Securedアノテーションが@PreAuthorizeで動作しないことを意味しますか?

私も

<security:global-method-security secured-annotations="enabled" /> 

を追加しようとしたが、それは助けにはなりません。

<security:global-method-security pre-post-annotations="enabled" /> 

上記の設定は問題ありません。何か案は?

答えて

7

まず、要素のuse-expressions設定はメソッドのセキュリティ注釈には影響しません。これらはglobal-method-securityを使用して有効にします。

<security:global-method-security pre-post-annotations="enabled" /> 

を使用して

PreAuthorizeとその関連注釈を可能にします。有効にしたときにセキュリティで保護された注釈が機能しない理由は、CUSTOM_ACCESSの意味を知っている有権者がいないためです。 Spring Securityのデフォルト設定では、RoleVoterは接頭辞ROLE_で始まる属性のみを消費します。詳細については、this FAQを参照してください。

投票者は、単純な役割を確認する以外の目的に使用できるため、一般的には、メソッドに設定されている属性のどれに適用されるのかを判断する方法が必要です。表現ベースのアノテーションは、標準的な有権者とは異なる働きをします。 hasRoleの式は、ユーザーに割り当てられた名前付きの権限を探します。

したがって、CUSTOM_ACCESS属性を消費するAccessDecisionVoterを使用してメソッドセキュリティのためにAccessDecisionManagerを作成すると、@Secured注釈が有効になります。しかし、すでにPostAuthorizeで作業しているので、それに固執したいかもしれません。

+0

\t ' – user12458

関連する問題