0

Spring Security の使い方を学んでおり、それを Web アプリケーションに統合しました。Spring と Spring Security バージョン 3.1.2 を使用しています。

セキュリティ構成で指定access="ROLE_USER"した場合、認証は正しく機能します。つまり、最初に 401 を受け取り、ログイン後にリソースにアクセスできます。

<http>
    <http-basic />
    <logout />
    <intercept-url
        pattern="/exports/**"
        access="ROLE_USER" />
</http>

ただし、EL に切り替えると、チェックが機能しなくなります。

<http use-expressions="true">
    <http-basic />
    <logout />
    <intercept-url
        pattern="/exports/**"
        access="hasRole('USER')" />
</http>

この 2 つの構成は同等だと思っていましたが、2 つ目の構成はリソースの表示を許可していません (403 エラー)。

ログを見る:

DEBUG org.springframework.security.web.access.intercept.FilterSecurityInterceptor - Previously Authenticated: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@844f42c6: Principal: org.springframework.security.core.userdetails.User@c052d588: Username: test; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_USER; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 127.0.0.1; SessionId: null; Granted Authorities: ROLE_USER

DEBUG org.springframework.security.access.vote.AffirmativeBased - Voter: org.springframework.security.web.access.expression.WebExpressionVoter@1a15597, returned: -1

DEBUG org.springframework.security.web.access.ExceptionTranslationFilter - Access is denied (user is not anonymous); delegating to AccessDeniedHandler

私の理解が正しければ、認証が機能しているにもかかわらず、WebExpressionVoter は私に反対票を投じています。

私は何が欠けていますか?

4

1 に答える 1

1

ROLE_解決策は簡単でした。次のように にも追加するだけhasRole()です。

access="hasRole('ROLE_USER')"

マニュアルのセクション 16.2 の例で誤解を招きました。

于 2012-09-30T22:14:57.980 に答える