在我正在AEM 6.1中工作的項目中,我們使用「新」方法通過行resolverFactory.getServiceResourceResolver()獲取有效的ResourceResolver對象。正如您所知,必須在環境中創建具有正確權限的系統用戶才能在JCR中執行一些任務。我們創建了具有管理員權限的系統用戶。AEM 6.1 - 解鎖具有resolverFactory.getServiceResourceResolver()方法的頁面問題
連接的權限:useradmin page
該用戶被分配到Apache的吊索服務用戶Mapper服務配置爲默認用戶,所以我們沒有在代碼中的地圖對象隨時通過與子服務名稱。我正在測試的頁面路徑是/content/test/test-1/test-folder/test-unlock-page/。附上相關的CODE。當執行行page.unlock(),這將引發一個WCMException
@Override
public void unlock(String userId, String pagePath) throws LoginException, WCMException {
ResourceResolver resourceResolver =resourceResolverFactory.getServiceResourceResolver(null);
PageManager pageMgr = resourceResolver.adaptTo(PageManager.class);
Session session = resourceResolver.adaptTo(Session.class);
Page page = pageMgr.getPage(pagePath);
if(!page.isLocked()) {
log.info("Page is NOT locked, unlock operation not mandatory: " + pagePath);
} else {
log.info("Unlocking page on behalf of: " + userId);
page.unlock();
}
異常的原因是:
javax.jcr.lock.LockException: Not an owner of the lock /content/test/test-1/test-folder/test-unlock-page/jcr:content
我讀到這link和文檔根據我的理解,當你指定一個修改允許這個用戶的用戶可以鎖(鎖定),但這一段沒有告訴任何有關解鎖:
在JCR級別,用戶可以通過修改其屬性來修改資源,鎖定,版本控制,nt修改,並且它們對定義jcr:content子節點的節點具有完全寫入權限,例如cq:Page ,nt:file,cq:資產
我想如果有可能在其他地方分配一個權限解鎖給這個系統用戶,因爲它似乎是不可能做到與當前特權。
感謝您的任何想法。
我看到過這個問題。我認爲只有鎖主和非常特殊的「管理員」用戶才能解鎖。所以你可以嘗試的是在代碼中模擬鎖擁有者會話,然後解鎖。讓我知道如果你找到另一種方式。 – Abhishek
@Abhishek謝謝你的回答,非常幫助我。我測試了這一點,似乎當我創建一個模擬爲了讓新系統用戶的行爲像管理員用戶,解鎖過程正常工作!但奇怪的是,如果我把'page.canUnlock()' - [documentation]解鎖之前進行驗證(https://docs.adobe.com/docs/en/cq/5-6-1/javadoc/ com/day/cq/wcm/api/Page.html#canUnlock())返回false,但解鎖過程正常。在我看來,解鎖只是鎖擁有者或顯式管理員用戶可以解鎖。我會告訴我是否找到另一種方式。 – codeparty2016