4

テスト用にApacheShiroの単純な承認レルムを作成しようとしています。

パブリッククラスMyAuthRealmはAuthorizingRealmを拡張します{
    @オーバーライド
    保護されたAuthorizationInfodoGetAuthorizationInfo(PrincipalCollectionプリンシパル){
        SimpleAuthorizationInfo sai = new SimpleAuthorizationInfo();
        sai.addRole( "kota");
        sai.addStringPermission( "koko:*:view");
        サイを返す;
    }

    @オーバーライド
    保護されたAuthenticationInfodoGetAuthenticationInfo(AuthenticationTokenトークン)はAuthenticationException{をスローします
        nullを返します。
    }
}

ご覧のとおり、ユーザーが誰であるかは関係ありません。ロールと特定の権限を返すだけです。

今、私は次のスニペットでそれをテストしようとしています:

if(SecurityUtils.getSubject()。hasRole( "kota")){
    out.write( "kota");
}
if(SecurityUtils.getSubject()。hasRole( "kota2")){
    out.write( "kota2");
}  
if(SecurityUtils.getSubject()。isPermitted( "koko:toto:view")){
    out.write( "koko");
}
if(SecurityUtils.getSubject()。isPermitted( "koko2:toto:view")){
    out.write( "koko2");
}

そして、私は次の出力を受け取ります

コタココココ2 

:(

したがって、役割は正しく構成されているように見えますが(ユーザーにはkotaの役割しかないため)、権限はありません(koko2が印刷されるのはなぜですか?)!!!!

誰かが私が間違っていることを私に説明できますか?

TIA!

4

1 に答える 1

5

このレルムを使用しているだけですか?複数のレルムを構成している場合があります。これを試して、現在使用しているレルムを確認してください。

for (Realm realm : ((RealmSecurityManager) SecurityUtils.getSecurityManager()).getRealms())
    System.out.println(realm.getName());

セキュリティマネージャは、複数のレルムに認証情報を要求する場合があります。これがこの問題の原因である可能性があります。

于 2012-02-10T14:20:01.450 に答える