私はAEM 6.1で作業中のプロジェクトで、有効なResourceResolverオブジェクトを取得するために "新しい"方法を使用しています。resolverFactory.getServiceResourceResolver()。ご存じのように、JCRでいくつかのタスクを実行するには、環境内で適切な権限でシステムユーザを作成する必要があります。管理者権限を持つシステムユーザを作成しました。AEM 6.1 - resolverFactory.getServiceResourceResolver()アプローチによるページロック解除
権限の取り付け:useradmin page
このユーザーは、デフォルトユーザとしてApacheのスリングサービスユーザーマッパーサービス設定に割り当てられているので、私たちは、コード内でいつでも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-modification、jcr:content子ノードを定義するノード、たとえばcq:Page 、nt:file、cq:Asset
このシステムユーザにロックを解除する権限を他の場所に割り当てることができるのであれば、現在の権限で実行できないように思われます。
ありがとうございました。
私はこの問題を見てきました。私はロックの所有者と非常に特殊な 'admin'ユーザだけがロックを解除できると思います。したがって、あなたのコードでロック所有者セッションを偽装してロックを解除することができます。あなたが別の方法を見つけたら教えてください。 – 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