2014-02-12 42 views
0

我想獲取CQ5 JCR中所有現有組的列表。我能夠獲取使用下面的代碼在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

問題的標題不會與您問題的內容同步。

首先,下面的代碼實際上是不必要的,因爲你正在尋找代表:用戶,因此只有用戶將在迭代器可用,從而使您若檢查失敗,每一次。

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:非結構化作爲屬性和值。你可以使用相對路徑來存在於所有可授權的屬性中,如果你想列出所有可授權的對象(包括profile/jcr:primaryType首先引起我的注意),則包含相同的值,否則結果將被過濾到屬性值匹配的那些可授權的。

如需進一步參考,您可以檢查docs

相關問題