Запутаться в Apache Shiro и пользовательских авторизационных сферах - PullRequest
4 голосов
/ 09 февраля 2012

Я пытаюсь создать простую область авторизации для Apache Shiro для тестирования:

public class MyAuthRealm extends AuthorizingRealm {
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        SimpleAuthorizationInfo sai = new SimpleAuthorizationInfo();
        sai.addRole("kota");
        sai.addStringPermission("koko:*:view");
        return sai;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        return 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 ");
} 

И я получаю следующий вывод

kota koko koko2 

(

Так что похоже, что роль настроена правильно (поскольку пользователь имеет только роль kota), но разрешения нет (почему печатается koko2 ???) !!!!

Кто-нибудь может мне объяснить, что я делаю не так?

TIA!

1 Ответ

5 голосов
/ 10 февраля 2012

Вы просто используете это царство?Вы можете настроить несколько областей;попробуйте это, чтобы увидеть, какие области у вас есть:

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

Ваш менеджер безопасности может запросить информацию об авторизации у нескольких областей;которая может быть причиной этой проблемы.

...