我想获取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,我可以迭代子节点来获取用户和组。
我正在寻找一种更简单的方法。
答案 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。