shiro注釈権限制御-5個権限注釈

3669 ワード

shiro注釈権限制御-5個権限注釈
シロには5つの注釈がありますので、詳しくお話ししましょう
  • RequiresAuthentication:
    この注記を使用するクラス、インスタンス、メソッドは、アクセスまたは呼び出し時に、現在のSubjectが現在のセッションで認証されている必要があります.
  • RequiresGuest:
    この注記を使用してマークアップされたクラス、インスタンス、メソッドは、アクセスまたは呼び出し時に、現在のSubjectが認証される必要がなく、または元のセッションにレコードが存在する「gust」アイデンティティであってもよい.
  • RequiresPermissions:
    現在のSubjectで特定のパーミッションが必要な場合は、注記によってマークアップされたメソッドを実行できます.現在のSubjectにこのような権限がない場合、メソッドは実行されません.
  • RequiresRoles:
    現在のSubjectで指定されたすべてのロールを持つ必要がある場合、この注記によってマークアップされたメソッドにアクセスできます.当日、Subjectがすべての指定されたロールを同時に所有していない場合、メソッドは実行されず、AuthorizationException例外も放出されます.
  • RequiresUser
    現在のSubjectは、注記によってマークアップされたクラス、インスタンス、メソッドにアクセスまたは呼び出すために適用されるユーザーでなければなりません.

  • 使用方法:
    Shiroの認証注記処理には内定の処理順序があり、複数の注記がある場合は、前のものが合格しても後のものをチェックし続け、合格しなければそのまま戻り、処理順序は(実際の宣言順序とは関係なく):
    RequiresRoles RequiresPermissions RequiresAuthentication RequiresUser RequiresGuest
    たとえば、RequiresRolesとRequiresPermissionsを同時に宣言すると、このロールを持つと同時に適切な権限を持つ必要があります.
    1) RequiresRoles
  • は、Controllerまたは方法で使用することができる.複数のrolesを使用できます.複数のrolesの場合、デフォルトのロジックはANDです.つまり、すべてのroleがアクセスできるようになります.
  • @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface RequiresRoles {
        String[] value();
        Logical logical() default Logical.AND; 
    }
  • //  user  
    @RequiresRoles("user")
    
    //      user admin  
    @RequiresRoles({"user","admin"})
    
    //  user  admin  ;  logical OR   
    @RequiresRoles(value={"user","admin"},logical=Logical.OR)

    2) RequiresPermissions
  • RequiresRolesと類似
  • @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface RequiresPermissions {
        String[] value();
        Logical logical() default Logical.AND; 
    }
  • //  index:hello    
    @RequiresPermissions("index:hello")
    
    //      index:hello index:world    
    @RequiresPermissions({"index:hello","index:world"})
    
    //  index:hello index:world      
    @RequiresPermissions(value={"index:hello","index:world"},logical=Logical.OR)

    3) RequiresAuthentication,RequiresUser,RequiresGuest
  • この3つの使い方は同じ
  • です
    @RequiresAuthentication
    @RequiresUser
    @RequiresGusst

    注意:Shiroはslf 4 j,commons-beanutils,commons-loggingの3つのjarパッケージに依存します.