我正在使用Grails应用程序,该应用程序使用远程Rice 2.3.6(嵌入在Kuali Coeus 5.2.1中)作为IAM后端。这方面的许多方面都是成功的!但这个不是:
org.kuali.rice.kim.api.role.RoleService kimRoleServiceClient
...
kimRoleServiceClient.assignPrincipalToRole(
principalId,
role.namespace,
role.name,
qualifiers)
kimRoleServiceClient.principalHasRole(
principalId,
[kimRoleServiceClient.getRoleIdByNamespaceCodeAndName(
role.namespace,
role.name)],
qualifiers) // returns true, as expected
kimRoleServiceClient.removePrincipalFromRole(
principalId,
role.namespace,
role.name,
qualifiers)
kimRoleServiceClient.principalHasRole(
principalId,
[kimRoleServiceClient.getRoleIdByNamespaceCodeAndName(
role.namespace,
role.name)],
qualifiers) // returns true (unexpected behavior)
无论是作为调用的结果还是作为远程KC catalina.out
中记录的异常,都不会返回错误。我可以在KC UI中验证角色是否仍然被分配,并且这不是两次调用之间的缓存问题 - 我可以等待相当长的时间并且角色仍然被分配。
任何线索?
编辑:
在rice.collab邮件列表中建议问题可能与KULRICE-9835: removePrincipalFromRole uses attribute id instead of attribute name in qualifier有关,Fiddle example在Rice 2.5.1中标记为已修复。这可能会带来进一步的障碍,但是即使对于没有限定符的角色,此调用也会失败,即上面调用中的qualifiers
是一个空的Map。
答案 0 :(得分:2)
您的编辑注释表明您没有传递限定符但是在这种情况下代码会抛出异常查看代码吗?这可能是你的问题吗?
./稻的中间件/金/ KIM-IMPL / SRC /主/ JAVA /组织/ kuali /米/金/ IMPL /角色/ RoleServiceImpl.java
@Override
public void removePrincipalFromRole(String principalId, String namespaceCode, String roleName,
Map<String, String> qualifier) throws RiceIllegalArgumentException {
if (StringUtils.isBlank(principalId)) {
throw new RiceIllegalArgumentException("principalId is null");
}
if (StringUtils.isBlank(namespaceCode)) {
throw new RiceIllegalArgumentException("namespaceCode is null");
}
if (StringUtils.isBlank(roleName)) {
throw new RiceIllegalArgumentException("roleName is null");
}
if (qualifier == null) {
throw new RiceIllegalArgumentException("qualifier is null");
}...