希望有人在这里可以帮助我解决难题。
我们正在尝试从我们的应用程序中删除所有管理员会话,但由于 JCR 访问被拒绝异常而被一些会话卡住了。具体来说,当我们尝试使用服务用户创建 AEM 组或用户时,我们会收到拒绝访问异常。这是为隔离问题而编写的一段代码:
private void testUserCreation2() {
String groupName = "TestingGroup1";
Session session = null;
ResourceResolver resourceResolver = null;
String createdGroupName = null;
try {
Map<String, Object> param = new HashMap<String, Object>();
param.put(ResourceResolverFactory.SUBSERVICE, "userManagementService");
resourceResolver = resourceResolverFactory.getServiceResourceResolver(param);
session = resourceResolver.adaptTo(Session.class);
// Create UserManager Object
final UserManager userManager = AccessControlUtil.getUserManager(session);
// Create a Group
LOGGER.info("Attempting to create group: "+groupName+" with user "+session.getUserID());
if (userManager.getAuthorizable(groupName) == null) {
Group createdGroup = userManager.createGroup(new Principal() {
@Override
public String getName() {
return groupName;
}
}, "/home/groups/testing");
createdGroupName = createdGroup.getPath();
session.save();
LOGGER.info("Group successfully created: "+createdGroupName);
} else {
LOGGER.info("Group already exists");
}
} catch (Exception e) {
LOGGER.error("Error while attempting to create group.",e);
} finally {
if (session != null && session.isLive()) {
session.logout();
}
if (resourceResolver != null)
resourceResolver.close();
}
}
请注意,我使用了名为 userManagementService 的子服务名称,它映射到名为 fwi-admin-user 的用户。由于 fwi-admin-user 是服务用户,我无法将其添加到管理员组(这似乎是 AEM 的设计限制)。但是,我已通过 useradmin UI 确认用户对整个存储库拥有完全权限。
不幸的是,当我调用此代码时,我仍然收到以下错误:
2020-06-22 17:46:56.017 INFO [za.co.someplace.forms.core.servlets.IntegrationTestServlet] 尝试创建组:TestingGroup1 与用户 fwi-admin-user 2020-06-22 17:46:56.025 错误[za.co.someplace.forms.core.servlets.IntegrationTestServlet] 尝试创建组时出错。javax.jcr.AccessDeniedException: OakAccess0000: org.apache.jackrabbit.oak.api.CommitFailedException.asRepositoryException(CommitFailedException.java:231) 在 org.apache.jackrabbit.oak.api.CommitFailedException.asRepositoryException(CommitFailedException.java: 212) 在 org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.newRepositoryException(SessionDelegate.java:670) 在 org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.save(SessionDelegate.java:496)
这是 AEM 错误,还是我在这里做错了什么?
提前致谢