遷移使用者、群組以及 AEM 執行個體之間的 ACL
本文提供在AEM中將具有ACL許可權的使用者和群組從一台伺服器遷移到另一台伺服器或從一個AEM執行個體遷移到另一個執行個體的各種方法。
說明 description
環境
Adobe Experience Manager 6.5 (AEM)
問題/症狀
將AEM中具有ACL許可權的使用者和群組從一台伺服器遷移到另一台伺服器或從一個AEM執行個體遷移到另一台伺服器。
解決方法 resolution
步驟1:找到管理員和匿名使用者
- 前往CRXDE Lite應用程式
/crx/de/index.jsp
並以 管理員使用者 身分登入(在來源系統上)。 - 移至 工具
=>
查詢。 - 在底部的 查詢 方塊中,輸入此查詢以尋找管理員使用者:
/jcr:root/home/users//element(*,rep:User)[ @rep:principalName="admin"]
。 - 按一下 執行,並將結果中管理員使用者節點的路徑複製到文字檔中。
- 對匿名使用者的查詢重複步驟3:
/jcr:root/home/users//element(*,rep:User)[ @rep:principalName="anonymous"]
。 - 按一下 執行,並將結果中匿名使用者節點的路徑複製到文字檔案中(所以現在您有兩個路徑,一個用於「管理員」,一個用於「匿名」)。 例如:
/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv
– 來源系統上的管理員使用者/home/users/K/Kj1406Qo9IDODc_nk5Ib
– 來源系統上的匿名使用者
步驟2:移轉使用者和群組(使用套件)
如果不是透過LDAP/SAML驗證或Crx2Oak自動匯入使用者(以上步驟2A),您可以封裝使用者和群組。
在這種情況下,您將在舊系統上建立兩個單獨的套件(不包括管理員和匿名的現成可用使用者)。
請依照下列步驟操作:
-
從上述步驟1 (步驟1:尋找管理員和匿名使用者)的結果中複製匿名和管理員使用者節點的路徑。
例如:
/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv
— 您正在建立套件的系統上的管理員使用者,或/home/users/K/Kj1406Qo9IDODc_nk5Ib
— 您正在建立套件的系統上的匿名使用者 -
前往 封裝管理員
http://host:port/crx/packmgr/index.jsp
,並以 管理員 身分登入。 -
建立封裝 使用者。
-
使用這些排除規則(在
/home/users
篩選器上)將篩選器新增到/home/users
的封裝設定: (注意:如果產品 從AEM新增/移除 群組/使用者,則清單可能需要變更)- 排除/home/users/。*/.tokens
- 排除/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv
- 排除/home/users/K/Kj1406Qo9IDODc_nk5Ib
- 排除/home/users/a/admin
- 排除/home/users/a/anonymous
- 排除/home/users/system
- 排除/home/users/geometrixx
- 排除/home/users/media
- 排除/home/users/projects
- 排除/home/users/mac
-
建置套件。
-
下載套件。
-
在您的電腦上解壓縮套件 zip 檔:
jar -xvf users.zip META-INF/vault/filter.xml
-
以文字編輯器開啟檔案
META-INF/vault/filter.xml
。 -
將模式= merge 新增至
<filter ...>
標籤,例如:code language-none <?xml version="1.0" encoding="UTF-8"?> <workspaceFilter version="1.0"> <filter root="/home/users" mode="merge"> <exclude pattern="/home/users/.*/.tokens"/> <exclude pattern="/home/users/Q/QY5FIMXeQIbGpwZtQ3Dv"/> <exclude pattern="/home/users/K/Kj1406Qo9IDODc_nk5Ib"/> <exclude pattern="/home/users/a/admin"/> <exclude pattern="/home/users/a/anonymous"/> <exclude pattern="/home/users/system"/> <exclude pattern="/home/users/geometrixx"/> <exclude pattern="/home/users/media"/> <exclude pattern="/home/users/projects"/> <exclude pattern="/home/users/mac"/> </filter> </workspaceFilter>
-
重新壓縮修改後的套件內容,使其包含變更。
jar -uvf users.zip META-INF/vault/filter.xml
-
建立包含篩選規則
/home/groups
的 群組 套件。 -
對群組套件重複步驟1至10。
-
(僅限升級)如果執行移轉至較新的AEM版本,請安裝新的本機AEM執行個體 (舊版本搭配
nosamplecontent
),然後安裝使用者套件和群組套件。 然後,在該執行個體上執行就地升級到新版本。 這會將使用者轉換為新的 Oak 表示方式。就地升級後,再次重新封裝使用者以將它們移植到您的預期升級執行個體。對使用者群組執行相同的操作。 -
在新系統上安裝使用者套件。
-
在新系統上安裝群組套件。
-
如果您要從較舊的AEM版本移轉至6.3,請移至
/useradmin
UI並將使用者復寫接收者新增至 管理員 群組。
步驟 3.移轉ACL
(注意:建立的套件應僅包含所需的ACL)請注意,執行這些命令的電腦必須是Mac OS、Linux或Windows (使用Cygwin),且已安裝curl、python和Java SDK。
-
前往
http://src-aem-host:port/crx/packmgr/index.jsp,
並以 管理員 身分登入。 -
建立名為 ACL-migration 的封裝。
-
按一下 編輯 按鈕。
-
選取 進階 索引標籤並將 AC處理模式 設定為 合併。
-
儲存。
-
建置套件並下載。
-
在檔案系統上,對封裝執行此命令以解壓縮
META-INF/vault/filter.xml
檔案:jar -xvf ACL-migration-1.0.zip META-INF/vault/filter.xml
-
在同一目錄中,執行此命令以從來源執行個體下載
/content
下ACL路徑的json檔案(設定使用者名稱、密碼和正確的主機):curl -u admin:admin 'http://aemhost/crx/de/query.jsp?' -G --data-urlencode '_dc=1507011481908&_charset_=utf-8&type=xpath&stmt=/jcr:root/content//element(*,rep:ACL)&showResults=true' > data.json
-
建立檔案
generate-package-filter.py
並在裡面貼上Python程式碼:\code language-none import json from pprint import pprint with open ('data.json') as data_file: data = json.load(data_file) print("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") print("<workspaceFilter version=\"1.0\">") form item in data[ "results"] : print("<filter root=\"{path}\" />" . format(path=item[ "path"] )) print("</workspaceFilter>")
-
從建立
data.json
的相同資料夾中執行Python指令碼,並將輸出儲存到META-INF/vault/filter.xml
(取代filter.xml
的現有內容):python generate-packge-filter.py > META-INF/vault/filter.xml
-
使用此命令以更新 zip 檔案中的
filter.xml
:jar -uvf ACL-migration-1.0.zip META-INF/vault/filter.xml
-
將zip檔案上傳到來源執行個體封裝管理員:
http://src-aem-host:port/crx/packmgr/index.jsp
-
按一下 建置 或者 重新建置 以建置套建。
-
從來源 AEM 伺服器下載套件。
-
將封裝上傳到目的地AEM伺服器的封裝管理員:
http://dst-aem-host:port/crx/packmgr/index.jsp
-
按一下 安裝 以進行安裝。
-
對變更路徑 curl 命令的任何其他路徑重複步驟 8 至 16。例如,這將使 ACL 位於
/etc
而不是/content
:
curl -u admin:admin 'http://aemhost/crx/de/query.jsp?' -G --data-urlencode '_dc=1507011481908&_charset_=utf-8&type=xpath&stmt=/jcr:root/etc//element(*,rep:ACL)&showResults=true' > data.json