1

私はSpringセキュリティにかなり慣れていないので、リファレンスを調べて、いくつかの例を実行しています。私が非常に欠けている機能の 1 つ (そして、他の誰もそれを見逃す人はほとんどいないのではないかと思います) は、アクセスが拒否された理由または理由についてカスタム情報をユーザーに提供することです。たとえば、モジュール A へのアクセス権がないこと、またはロール アクセス B を付与する必要があることなどをユーザーに通知したいと思います。

ロール インターフェイスを確認しましたが、次の情報が失われているようです。

int vote(Authentication authentication, Object object, List<ConfigAttribute> config);

Spring Security Access Denied logging with missing roleこれは、 AccessDecisionManager のカスタム実装を提供する必要があることを示しています。

しかし、アクセスが拒否された場合に特定の情報を提供する実際の実装はどのようになるのでしょうか? そして、それを春のセキュリティにフックする方法は? まず、単純な役割ベースのアクセスで十分です。誰でもこれに関する例を提供できますか?

4

1 に答える 1

2

AffirmativeBased- DecisionManagerを見てください。にいくつかの追加情報を追加して、それを強化することができますAccessDeniedExceptionVoterしかし、アクセスを拒否した理由を sから取得するのはそれほど簡単ではないようです。(命名パターンを見つけるか、有権者を拡張する必要さえあることを願っています)。

これは、カスタム DecisionManager を構成する方法の例です

 <security:http auto-config="true" access-decision-manager-ref="myDecisionManager">

 <bean id="myAccessDecisionManager"
    class="MyAffirmativeBasedDecisionManager">
    <constructor-arg name="decisionVoters">
        <list>
            <ref bean="roleVoter" />
            <ref bean="authenticatedVoter" />
            <ref bean="preAdviceVoter" />
        </list>
    </constructor-arg>
</bean>


<bean id="roleVoter" class="org.springframework.security.access.vote.RoleVoter" />

<bean id="authenticatedVoter"
    class="org.springframework.security.access.vote.AuthenticatedVoter" />

<bean id="preAdviceVoter"
    class="org.springframework.security.access.prepost.PreInvocationAuthorizationAdviceVoter">
    <constructor-arg ref="exprPreInvocationAdvice" />
</bean>

    <bean
    class="org.springframework.security.access.expression.method.ExpressionBasedPreInvocationAdvice"
    id="exprPreInvocationAdvice">
    <property name="expressionHandler" ref="methodExprHandler" />
</bean>

<bean id="methodExprHandler"
    class="org.springframework.security.access.expression.method.ExtensibleMethodSecurityExpressionHandler">
    <property name="methodSecurityExpressionRootFactory">
            <bean
            class="com.queomedia.infrastructure.security.spring.MethodSecurityExpressionRootFactoryImpl" />
    </property>
</bean>
于 2012-10-08T12:53:15.250 に答える