2012-07-18 4 views
9

は、我々はRoleVoterメカニズムを使用することを計画したが、我々は我々が実施しているセキュリティがベース役割よりも基づいて、よりタスクがあるようROLE_プレフィックスを削除したいです。Spring SecurityのRoleVoterにプレフィックスが必要なのはなぜですか?我々のアプリケーションで

技術的に問題はありませんが、ドキュメントではusing the RoleVoter with an empty prefix should be discouragedです。

私はなぜだろうか?

AFAICS、唯一の問題は、プレフィックスなし、RoleVoterは、それがかもしれないがABSTAINの代わりに拒否されたアクセスを返します(そのようIS_AUTHENTICATED_FULLYIS_AUTHENTICATED_REMEMBERED、...など)とすることを意味しないことが決定に参加する、ということです。

これは空のプレフィックスが付いている唯一の問題であることをご確認ください。事前に

おかげ M.

答えて

13

はい。複数の投票者またはカスタム投票者を使用している場合、消費するべき属性を知るためには何らかの方法が必要です。たとえば、DayOfTheWeekVoterがあり、属性がROLE_USER,DAY_MONDAYの場合、RoleVoterはユーザにロールが割り当てられているため、アクセスを許可すると投票することがありますが、DayOfTheWeekVoterは月曜日ではないためアクセスを拒否する可能性があります。

接頭辞をRoleVoterに設定しないと、ユーザーに「DAY_MONDAY」という名前の権限が割り当てられているかどうかがチェックされます。このシナリオは機能しません。

ロールにのみ関心がある場合は、接頭辞を使用せずに行うことも、を使用しない式(hasRole('user')など)を使用することもできます。

+1

こんにちはルーク、私はちょうど1.2.2から1.3.2にスプリングブートをアップグレードし、これは私のためにブレーキをかけるようになった。私のコントローラは@PreAuthorize( "hasRole( 'Edit')")を持っています。そして今、ROLE_プレフィックスをチェックし始めています。 RoleVoterを経由しているため、この回答を投稿してからhasRole()の説明が変わったようです。接頭辞を空 ""にする方法を見つけようとしましたが、どれも動作していません... Spring Boot 1.3.2でこれを行う別の方法をお勧めできますか? – szxnyc

+2

私はそれをhaaAuthorityに変更しました。 – szxnyc

関連する問題