【问题标题】:Kuali Rice remote API: removePrincipalFromRole failing silentlyKuali Rice 远程 API:removePrincipalFromRole 静默失败
【发布时间】:2016-02-20 03:40:09
【问题描述】:

我正在使用远程 Rice 2.3.6(嵌入在 Kuali Coeus 5.2.1 中)作为 IAM 后端的 Grails 应用程序中工作。这方面很多方面都是成功的!但是这个不是:

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 有关,在 Rice 2.5.1 中标记为已修复。这可能会带来进一步的障碍,但目前即使对于没有限定符的角色,该调用也会失败,即当上述调用中的 qualifiers 是一个空 Map 时。

【问题讨论】:

    标签: cxf kuali


    【解决方案1】:

    您的编辑发现您没有通过限定符,但是在这种情况下查看代码时代码会引发异常?这可能是你的问题吗?

    ./rice-middleware/kim/kim-impl/src/main/java/org/kuali/rice/kim/impl/role/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");
            }...
    

    【讨论】:

    • 如果这是问题所在,第一次调用将失败,Dan 不会断言第二次调用返回 true。
    • 我正在传递一个空的限定符 Map(Groovy 的 [:]),而不是 null,所以我应该在这里很好。我在使用assignPrincipalToRole 时也是这样做的,没有问题;我将编辑问题以使其更清楚。
    • 我想知道谁投票赞成答案,因为它不正确?抱歉,Ken,我错过了 Dan 的评论,即第二个调用返回 true,我不知道我如何知道该调用是否通过了任何限定符,因为它不是我正在处理的 api 调用。我可能也完全错过了您的观点,但我只是在查看代码,并根据评论认为可能是这种情况。
    猜你喜欢
    • 2013-09-29
    • 2017-01-10
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    相关资源
    最近更新 更多