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

公共类MyAuthRealm扩展了AuthorizingRealm {
@Override
受保护的AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection主体){
SimpleAuthorizationInfo sai =新的SimpleAuthorizationInfo();
sai.addRole(“kota”);
sai.addStringPermission(“koko:*:view”);
回赛
}

@Override
受保护的AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token )抛出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”);
}

我收到以下输出

kota koko koko2

:(

因此,似乎已正确配置了角色(由于用户仅具有角色kota),但权限却未配置(为什么会打印koko2 ???)!

有人可以向我解释我做错了什么吗?

TIA!

最佳答案

您只是在使用这个领域?您可能配置了多个领域。尝试此操作以查看您当前拥有哪些领域:

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

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

08-04 21:51