4

我正在尝试为 Apache Shiro 创建一个简单的授权领域以进行测试:

公共类 MyAuthRealm 扩展 AuthorizingRealm {
    @覆盖
    受保护的 AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        SimpleAuthorizationInfo sai = new SimpleAuthorizationInfo();
        sai.addRole("kota");
        sai.addStringPermission("koko:*:view");
        返回赛;
    }

    @覆盖
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        返回空值;
    }
}

如您所见,它并不关心用户是谁——它只返回一个角色和一个特定的权限。

现在,我正在尝试在以下代码段中对其进行测试:

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???)!!!

谁能向我解释我做错了什么?

蒂亚!

4

1 回答 1

5

你只是在使用这个领域吗?您可能配置了多个领域;试试这个看看你目前拥有哪些领域:

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

您的安全经理可能会向多个领域询问授权信息;这可能是这个问题的原因。

于 2012-02-10T14:20:01.450 回答