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ページで権限制御を行う.
ラベルライブラリのインポート
:
Subject.isPermitted*/hasRole*
インタフェースは、SecurityManagerに され、SecurityManagerはAuthorizerに されます.- Authorizerは の であり、isPermitted(「user:view」)のように び すと、まずPermissionResolverを じて を するPermissionインスタンスに します.
- は、 を う に、 するRealmを び してSubjectの するロール/パーミッションを し、 したロール/パーミッションと させる.
- Authorizerは、Realmのロール/ が したものと するかどうかを し、 のRealmがある はModularRealmAuthorizerにループ を し、 が
isPermitted*/hasRole*
の はtrueを し、そうでない はfalseに って に します.
ModularRealmAuthorizerによるマルチRealmマッチングプロセス:- まず、 するRealmがAuthorizerを したかどうかを する.
- Authorizerが された 、 する
isPermitted*/hasRole*
インタフェースがマッチングのために び される.- Realmマッチングがある はtrueが され、そうでない はfalseが されます.
Realmがライセンスを する は、AuthorizingRealmを する があります.そのプロセスは のとおりです.hasRole*
が び すと、AuthorizationInfoが される.getRoles()は、 されたロールと すればよい.まず、isPermitted(「user:view」)のように び されると、まずPermissionResolverによって が するPermissionインスタンスに され、デフォルトではWildcardPermissionResolver、すなわちワイルドカードに されたWildcardPermissionが される.- AuthorizationInfoを する.getobjectPermissions()はPermissionインスタンスの を る;AuthorizationInfo.getStringPermissions()から られた セットのマージはPermissionResolverによってPermissionインスタンスとして される. に、ユーザーのロールを し、ロールPermissionResolverによってロールに する のセットを します(デフォルトでは されていません. で できます).
- は にPermissionを び す.implies(Permission p)は、 された と1つずつ し、 する はtrueを します.そうでない falseです.
カスタムRealmpublic 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