クラス AclEntryVoter

  • 実装されたすべてのインターフェース:
    AccessDecisionVoter<org.aopalliance.intercept.MethodInvocation>

    public class AclEntryVoter
    extends AbstractAclVoter

    メソッドの引数として渡されたドメインオブジェクトインスタンスを指定して、AclService で示されているように、プリンシパルに適切な権限があることを確認します。

    AclService は、現在の Authentication オブジェクトのドメインオブジェクトインスタンスに関連付けられているアクセス制御リスト(ACL)のアクセス許可を取得するために使用されます。

    投票者は、いずれかの ConfigAttribute.getAttribute()processConfigAttribute と一致する場合に投票します。次に、プロバイダーは、型 AbstractAclVoter.processDomainObjectClass の最初のメソッド引数を見つけます。メソッドの引数が null でないと仮定すると、プロバイダーは AclManager から ACL を検索し、そのメソッドに requirePermission 配列を提示するときにプリンシパルが Acl.isGranted(List, List, boolean) であることを確認します。

    メソッドの引数が null の場合、投票者は投票を控えます。メソッドの引数が見つからなかった場合、AuthorizationServiceException がスローされます。

    実際には、ユーザーは通常、いくつかの AclEntryVoter をセットアップします。processDomainObjectClassprocessConfigAttributerequirePermission の組み合わせはそれぞれ異なります。例: 小さなアプリケーションでは、 AclEntryVoter の次のインスタンスを使用する場合があります。

    • プロセスドメインオブジェクトクラス BankAccount、構成属性 VOTE_ACL_BANK_ACCONT_READ、許可 BasePermission.READ が必要
    • プロセスドメインオブジェクトクラス BankAccount、構成属性 VOTE_ACL_BANK_ACCOUNT_WRITE、許可リスト BasePermission.WRITE および BasePermission.CREATE が必要 (プリンシパルがこれら 2 つの権限のいずれかを持つことを許可する)
    • プロセスドメインオブジェクトクラス Customer、構成属性 VOTE_ACL_CUSTOMER_READ、許可 BasePermission.READ が必要
    • プロセスドメインオブジェクトクラス Customer、構成属性 VOTE_ACL_CUSTOMER_WRITE、許可リスト BasePermission.WRITE および BasePermission.CREATE が必要
    あるいは、BankAccount と Customer の両方に共通の親がある場合、AbstractAclVoter.processDomainObjectClass に共通のスーパークラスまたはインターフェースを使用することもできます。

    プリンシパルに十分な権限がない場合、投票者は投票を行ってアクセスを拒否します。

    すべての比較と接頭辞は大文字と小文字が区別されます。

    • コンストラクターの詳細

      • AclEntryVoter

        public AclEntryVoter​(AclService aclService,
                             java.lang.String processConfigAttribute,
                             Permission[] requirePermission)
    • メソッドの詳細

      • getInternalMethod

        protected java.lang.String getInternalMethod()
        必要に応じて、含まれているドメインオブジェクトを取得するために使用されるドメインオブジェクトのメソッドを指定します。その含まれているドメインオブジェクトは、ACL の評価に使用されます。これは、ドメインオブジェクトに、子ドメインオブジェクトではなく、ACL 評価の対象となる親が含まれている場合に役立ちます。(おそらく作成されているため、まだ ACL 権限がありません)
        戻り値:
        ドメインオブジェクトを使用する null、または ACL の評価に使用されるドメインオブジェクトとなる Object を取得するために呼び出す必要があるメソッド(引数を必要としない)の名前
      • setInternalMethod

        public void setInternalMethod​(java.lang.String internalMethod)
      • getProcessConfigAttribute

        protected java.lang.String getProcessConfigAttribute()
      • setSidRetrievalStrategy

        public void setSidRetrievalStrategy​(SidRetrievalStrategy sidRetrievalStrategy)
      • supports

        public boolean supports​(ConfigAttribute attribute)
        インターフェースからコピーされた説明: AccessDecisionVoter
        この AccessDecisionVoter が、渡された ConfigAttribute に投票できるかどうかを示します。

        これにより、AbstractSecurityInterceptor は、構成された AccessDecisionManager および / または RunAsManager および / または AfterInvocationManager が消費できるすべての構成属性をチェックできます。

        パラメーター:
        attribute - AbstractSecurityInterceptor に対して構成された構成属性
        戻り値:
        この AccessDecisionVoter が渡された構成属性をサポートできる場合は true
      • vote

        public int vote​(Authentication authentication,
                        org.aopalliance.intercept.MethodInvocation object,
                        java.util.Collection<ConfigAttribute> attributes)
        インターフェースからコピーされた説明: AccessDecisionVoter
        アクセスが許可されているかどうかを示します。

        決定は肯定的(ACCESS_GRANTED)、否定的(ACCESS_DENIED)でなければなりません。そうでない場合、AccessDecisionVoter は投票を棄権(ACCESS_ABSTAIN)できます。どのような状況でも、実装クラスは他の値を返しません。結果の重み付けが必要な場合は、代わりにカスタム AccessDecisionManager で処理する必要があります。

        AccessDecisionVoter は、渡されたメソッド呼び出しまたは構成属性パラメーターが原因でアクセス制御の決定に投票することを特に意図していない限り、ACCESS_ABSTAIN を返す必要があります。これにより、調整する AccessDecisionManager が、アクセス制御の決定に正当な関心を持たずに、それらの AccessDecisionVoter からの投票をカウントすることを防ぎます。

        セキュリティで保護されたオブジェクト(MethodInvocation など)がパラメーターとして渡され、アクセス制御の決定を行う際の柔軟性を最大化しますが、実装クラスはそれを変更したり、(たとえば、MethodInvocation.proceed() を呼び出して)呼び出されたりしないようにする必要があります。

        パラメーター:
        authentication - 呼び出しを行う呼び出し元
        object - 呼び出されている保護されたオブジェクト
        attributes - 保護されたオブジェクトに関連付けられた構成属性
        戻り値:
        AccessDecisionVoter.ACCESS_GRANTEDAccessDecisionVoter.ACCESS_ABSTAIN または AccessDecisionVoter.ACCESS_DENIED のいずれか