有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获取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) 个答案

  1. # 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:primaryTypent:unstructured作为属性和值。如果要列出所有可授权项(在我的例子中,profile/jcr:primaryType首先引起我的注意),可以使用所有可授权项中包含相同值的任何属性的相对路径,否则结果将被过滤到属性值匹配的可授权项

    如需进一步参考,请查看docs