如何获取jcr中的所有现有组?

时间:2014-02-12 06:53:50

标签: java adobe cq5 jcr

我想获取CQ5 JCR中所有现有组的列表。我可以使用以下代码

获取JCR中所有现有用户的列表
        UserManager userManager = jkrSession.getUserManager();
        final List<String> users = new ArrayList<String>();
        Iterator<Authorizable> iter = userManager.findAuthorizables(
              "jcr:primaryType", "rep:User");
        while (iter.hasNext()) {
        Authorizable auth = iter.next();
        if (!auth.isGroup()) {
                        users.add(auth.getID());
                }
        }

我还没有找到任何方法来获取所有现有用户的列表。虽然,我可以看到父节点/ home / users和/ home / groups,我可以迭代子节点来获取用户和组。

我正在寻找一种更简单的方法。

1 个答案:

答案 0 :(得分:1)

您问题的标题与您问题的内容不同步。

首先,以下代码实际上是不必要的,因为您正在搜索 rep:User ,因此只有用户才能在迭代器中使用,从而使您的if检查每次都失败。

    Authorizable auth = iter.next();
    if (!auth.isGroup()) {
        users.add(auth.getID());
    }

因此,while循环可以重写为

    users.add(iter.next().getID());

其次,如果它是您要获取的所有现有组的列表,则可以使用

    Iterator<Authorizable> iter = userManager.findAuthorizables(
          "jcr:primaryType", "rep:Group");

这将仅返回您实例中存在的组。

但是,如果它是两者,您想要获取的用户和组,可能是您可以试试这个。

    Iterator<Authorizable> iter = userManager.findAuthorizables(
          "profile/jcr:primaryType", "nt:unstructured", UserManager.SEARCH_TYPE_AUTHORIZABLE);

这将返回实例中存在的所有可授权。您必须仅指定 profile / jcr:primaryType nt:unstructured 作为属性和值。您可以使用所有可授权中存在的任何属性的相对路径,如果要列出所有可授权项,则包含相同的值(在我的情况下, profile / jcr:primaryType 首先引起了我的注意),否则结果将被过滤到属性值匹配的那些可授权人。

如需进一步参考,您可以查看docs