Shiroライセンス

4308 ワード

 
  

Shiro三种授权方式

编程式:通过写 if/else 授权代码块完成:

Subject subject = SecurityUtils.getSubject();
if(subject.hasRole(“admin”)) {
    //   
} else {
    //   
}

注記式:実行するJavaメソッドに対応する注記を配置することで完了します.
@RequiresRoles("admin")
public void hello() {
    //   
}

対応する例外を投げ出す権限がありません.
JSP/GSPラベル:JSP/GSPページで相応のラベルで完成する:
Shiroは、登録ユーザに応じて該当するページボタンを表示するなど、JSTLラベルを提供し、JSP/GSPページで権限制御を行う.
ラベルライブラリのインポート


  1.  Subject.isPermitted*/hasRole*インタフェースは、SecurityManagerに され、SecurityManagerはAuthorizerに されます.

  2. Authorizerは の であり、isPermitted(「user:view」)のように び すと、まずPermissionResolverを じて を するPermissionインスタンスに します.
  3. は、 を う に、 するRealmを び してSubjectの するロール/パーミッションを し、 したロール/パーミッションと させる.
  4. Authorizerは、Realmのロール/ が したものと するかどうかを し、 のRealmがある はModularRealmAuthorizerにループ を し、 がisPermitted*/hasRole*の はtrueを し、そうでない はfalseに って に します.

  5. ModularRealmAuthorizerによるマルチRealmマッチングプロセス:
  6. まず、 するRealmがAuthorizerを したかどうかを する.
  7. Authorizerが された 、 するisPermitted*/hasRole*インタフェースがマッチングのために び される.
  8. Realmマッチングがある はtrueが され、そうでない はfalseが されます.

  9. Realmがライセンスを する は、AuthorizingRealmを する があります.そのプロセスは のとおりです.
  10. hasRole*が び すと、AuthorizationInfoが される.getRoles()は、 されたロールと すればよい.まず、isPermitted(「user:view」)のように び されると、まずPermissionResolverによって が するPermissionインスタンスに され、デフォルトではWildcardPermissionResolver、すなわちワイルドカードに されたWildcardPermissionが される.
  11. AuthorizationInfoを する.getobjectPermissions()はPermissionインスタンスの を る;AuthorizationInfo.getStringPermissions()から られた セットのマージはPermissionResolverによってPermissionインスタンスとして される. に、ユーザーのロールを し、ロールPermissionResolverによってロールに する のセットを します(デフォルトでは されていません. で できます).
  12. は にPermissionを び す.implies(Permission p)は、 された と1つずつ し、 する はtrueを します.そうでない falseです.

  13. カスタムRealm
    public class MyRealm extends AuthorizingRealm {
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
            SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
            authorizationInfo.addRole("role1");
            authorizationInfo.addRole("role2");
            authorizationInfo.addObjectPermission(new BitPermission("+user1+10"));
            authorizationInfo.addObjectPermission(new WildcardPermission("user1:*"));
            authorizationInfo.addStringPermission("+user2+10");
            authorizationInfo.addStringPermission("user2:*");
            return authorizationInfo;
        }
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
            //    
        }
    }

    QQ :785071190
    を :http://www.coder306.cn/?p=210