1

@RolesAllowed を使用した Controller メソッドが正しく機能するという問題がありますが、@Secured を使用しようとすると AccessDeniedException が発生します。私は @RolesAllowed アノテーションを使用することを好みますが、このプロジェクトでは @Secured を使用する必要があると宣言されています。これは、従来のアクセス権にマップされたときに名前が混乱しにくいためです。

注釈を次のように構成しています。

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

ユーザーが持っているものを使用する@RolesAllowed("COMPANY_SEE_REPORTS")と、正しく動作します。使用する@Secured("COMPANY_SEE_REPORTS")と、AccessDeniedException が発生します。@RolesAllowed が正しく機能していることを確認するために、役割を存在しない役割に変更し、その時点で @RolesAllowed をスローしました。私の質問は、@Secured を正しく動作させるにはどうすればよいですか?

4

1 に答える 1

3

で終わる名前のセキュリティ ロールを使用してみてくださいROLE

Spring Security Reference から

役割投票者

Spring Security で提供される最も一般的に使用される AccessDecisionVoter は単純な RoleVoter です。これは、構成属性を単純なロール名として扱い、ユーザーにそのロールが割り当てられている場合にアクセスを許可する投票を行います。

ConfigAttribute がプレフィックス ROLE_ で始まる場合に投票します。プレフィックス ROLE_ で始まる 1 つ以上の ConfigAttributes と正確に等しい文字列表現を (getAuthority() メソッドを介して) 返す GrantedAuthority がある場合、アクセスを許可するために投票します。ROLE_ で始まる ConfigAttribute と完全に一致するものがない場合、RoleVoter はアクセスを拒否するために投票します。ROLE_ で始まる ConfigAttribute がない場合、有権者は棄権します。

ただし、 RoleVoter プレフィックスは変更できますRoleVoter#setRolePrefix(String rolePrefix)

于 2013-06-28T00:28:55.417 に答える