クラス RoleHierarchyImpl

java.lang.ObjectSE
org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl
実装されたすべてのインターフェース:
RoleHierarchy

public class RoleHierarchyImpl extends ObjectSE implements RoleHierarchy

このクラスは、さまざまなアクセスチェックコンポーネントで使用するロール階層を定義します。

ロール階層の構成例を次に示します(ヒント: 「インクルード」として ">" 記号を参照してください)。

     <property name="hierarchy">
         <value>
             ROLE_A > ROLE_B
             ROLE_B > ROLE_AUTHENTICATED
             ROLE_AUTHENTICATED > ROLE_UNAUTHENTICATED
         </value>
     </property>
 

上記の説明:

  • 実際、ROLE_A を持つすべてのユーザーには、ROLE_B、ROLE_AUTHENTICATED、ROLE_UNAUTHENTICATED もあります。
  • ROLE_B を持つすべてのユーザーには、ROLE_AUTHENTICATED と ROLE_UNAUTHENTICATED もあります。
  • ROLE_AUTHENTICATED を持つすべてのユーザーには、ROLE_UNAUTHENTICATED もあります。

階層的ロールは、アクセスルールを劇的に短縮します(また、アクセスルールをよりエレガントにします)。

Spring Security の RoleVoter のこのアクセスルールを検討してください(背景: 認証されたすべてのユーザーがログアウトできる必要があります):

/logout.html=ROLE_A,ROLE_B,ROLE_AUTHENTICATED
階層的なロールにより、これを次のように短縮できます。
/logout.html=ROLE_AUTHENTICATED
短いルールに加えて、これによりアクセスルールが読みやすくなり、意図が明確になります。
  • コンストラクターの詳細

  • メソッドの詳細

    • fromHierarchy

      public static RoleHierarchyImpl fromHierarchy(StringSE hierarchy)
      次のように、指定された定義を持つロール階層インスタンスを作成します。
           ROLE_A > ROLE_B
           ROLE_B > ROLE_AUTHENTICATED
           ROLE_AUTHENTICATED > ROLE_UNAUTHENTICATED
       
      パラメーター:
      hierarchy - 使用するロール階層
      戻り値:
      指定された hierarchy を使用する RoleHierarchyImpl
    • withDefaultRolePrefix

      public static RoleHierarchyImpl.Builder withDefaultRolePrefix()
      デフォルトのロールプレフィックス "ROLE_" を持つ RoleHierarchyImpl.Builder インスタンスを作成するファクトリメソッド
      戻り値:
      デフォルトのロールプレフィックス "ROLE_" を持つ RoleHierarchyImpl.Builder インスタンス
      導入:
      6.3
    • withRolePrefix

      public static RoleHierarchyImpl.Builder withRolePrefix(StringSE rolePrefix)
      指定されたロールプレフィックスを持つ RoleHierarchyImpl.Builder インスタンスを作成するファクトリメソッド。
      パラメーター:
      rolePrefix - 階層内のロールに使用されるプレフィックス。
      戻り値:
      指定されたロールプレフィックスを持つ新しい RoleHierarchyImpl.Builder インスタンス
      例外:
      IllegalArgumentExceptionSE - 提供されたロールプレフィックスが null の場合
      導入:
      6.3
    • setHierarchy

      @DeprecatedSE public void setHierarchy(StringSE roleHierarchyStringRepresentation)
      使用すべきではありません。
      代わりに fromHierarchy(java.lang.String) を使用してください
      ロールの階層を設定し、すべてのロールについて、到達可能なすべてのロールのセット、つまり、指定されたすべてのロールの階層の下位にあるすべてのロールを事前に計算します。事前計算はパフォーマンス上の理由で行われます(到達可能なロールは O(1) 時間で計算できます)。事前計算中に、ロール階層のサイクルが検出され、 CycleInRoleHierarchyException がスローされます。
      パラメーター:
      roleHierarchyStringRepresentation - - ロール階層の文字列定義。
    • getReachableGrantedAuthorities

      public CollectionSE<GrantedAuthority> getReachableGrantedAuthorities(CollectionSE<? extends GrantedAuthority> authorities)
      インターフェースからコピーされた説明: RoleHierarchy
      到達可能なすべての権限の配列を返します。

      到達可能権限は、直接割り当てられた権限に加えて、ロール階層内でそれらから(推移的に)到達可能なすべての権限です。

      例:
      ロール階層: ROLE_A> ROLE_B> ROLE_C。
      直接割り当てられた権限: ROLE_A。
      到達可能な権限: ROLE_A、ROLE_B、ROLE_C。

      次で指定:
      インターフェース RoleHierarchygetReachableGrantedAuthorities 
      パラメーター:
      authorities - - 直接割り当てられた権限のリスト。
      戻り値:
      割り当てられた権限を指定されたすべての到達可能な権限のリスト。