В проекте, который я работаю в AEM 6.1, мы используем «новый» способ получения действительного объекта ResourceResolver по строке resolverFactory.getServiceResourceResolver(). Как вам известно, необходимо иметь системного пользователя, созданного с правильными разрешениями в среде, для выполнения некоторых задач в JCR. Мы создали пользователя системы с правами администратора.AEM 6.1 - Проблема с разблокировкой страниц с использованием метода resolverFactory.getServiceResourceResolver()
прикрепиться разрешений: useradmin page
Этот пользователь назначается Apache Sling Service User Mapper Service конфигурации как Default User, поэтому мы не должны пройти в любое время в коде объекта Map с именем подсервиса. Путь к странице, который я тестирую, - /content/test/test-1/test-folder/test-unlock-page/. Присоединен к соответствующему КОДУ. Когда линия 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 , нт: файл, сд: Asset
Я имею в виду, если можно назначить в другом месте разрешения, чтобы разблокировать в этой системе пользователя, потому что кажется, что это невозможное, чтобы сделать это с текущими привилегиями.
Спасибо за любое представление об этом.
Я видел эту проблему. Я думаю, что только владелец замка и чрезвычайно специальный пользователь 'admin' могут разблокировать. Итак, что вы можете попробовать, это выдавать себя за сеанс владельца замка в вашем коде, а затем разблокировать. Дайте мне знать, если вы найдете другой путь. – Abhishek
@Abhishek Спасибо за ваш ответ, очень помогите мне. Я тестировал это и, кажется, когда создаю олицетворение, чтобы позволить новому пользователю системы вести себя как пользователь admin, процесс разблокировки работает нормально! но странно, что если я поставил проверку перед разблокировкой с помощью 'page.canUnlock()' - [documentation] (https://docs.adobe.com/docs/en/cq/5-6-1/javadoc/ com/day/cq/wcm/api/Page.html # canUnlock()), это возвращает 'false', но процесс разблокировки работает нормально. Мне кажется, что, возможно, для разблокировки только владельца замка или явно пользователь-администратор может разблокировать. Я скажу, нашел ли я другой путь. – codeparty2016