我想将一些数据写入AEM,下面的代码在AEM 6.0中对我很好,但在AEM 6.1中不适用,总是抛出一个Login异常,如下所示:
当为Service:'writeService'.org.apache.sling.api.resource.LoginException:获取CRX用户时,登录异常不能为bundle derive p.tti.commons- service 395和service派生用户名
OSGI Config:

我班上的代码:
import javax.jcr.Session;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
....
@Reference
private ResourceResolverFactory factory;
private ResourceResolver resourceResolverWriter;
private static Session adminSession;
...
...
Map<String, Object> param = new HashMap<String, Object>();        
    param.put(ResourceResolverFactory.SUBSERVICE, "writeService");
try {
  resourceResolverWriter = factory.getServiceResourceResolver(param);            
  adminSession = resourceResolverWriter.adaptTo(Session.class);
...
} catch (LoginException e) {
...
}我在AEM 6.1上漏掉了什么吗?
发布于 2015-07-13 22:29:12
在贾斯汀的建议下,我试着找到了解决办法。张贴这样可以有益于其他人。
目标:当用户登录时,将数据/节点写入内容(特别是/etc/userdata)。
我们可以通过两种方式来实现这一点(不管是哪种方式,用户都需要成为“系统用户”)
流程1:
步骤1:在OSGI配置中使用内置的系统用户.在OSGI中选择Apache服务用户Mapper服务
group.abc.commons-service:writeService=oauthservice ( oauthservice是系统用户)
步骤2:为系统用户分配访问内容文件夹的权限。

您可以看到CRX中的系统用户在:/home/users/system
流程2:
步骤1:创建一个新的系统用户。要执行此操作,请打开http://localhost:4502/crx/explorer/index.jsp
1. Login as admin 
2. Open 'User Administration
3. Select 'Create System User'
4. Enter "user id"
5. Hit the Green button (you will not se a save button :)`我已经创建了abcwriteservice用户
步骤2:转到权限,对于用户,abcwriteservice给出访问您想要写入的文件夹的权限。(在本例中:/etc/userdata )

步骤3:打开OSGI控制台并转到Apache User Mapper Service来定义服务-用户映射。
示例:group.commons-service:writeService=abcwriteservice

步骤4:在代码中,我添加了额外的参数,如:
Map<String, Object> param = new HashMap<String, Object>();
param.put(ResourceResolverFactory.SUBSERVICE, "writeService");
try {
    resourceResolverWriter = factory.getServiceResourceResolver(param);
    if (resourceResolverWriter == null)
        throw new Exception("Could not obtain a CRX User for the Service:'writeService'");
    Node usersRootNode = adminSession.getNode("/etc/userdata/users");
}发布于 2015-07-11 13:12:42
在AEM 6.1中,服务用户必须是系统用户,这实际上意味着他们在JCR中的节点是rep:SystemUser类型。这些用户无法正常使用登录,只能通过后台进程登录。管理用户是而不是系统用户,因此您不能在这样的服务用户映射中使用管理用户。您必须创建一个新的系统用户,并为他们分配适当的权限。
如果您想阅读更多有关此更改的背景信息,请查看https://issues.apache.org/jira/browse/SLING-3854。
发布于 2017-10-21 01:55:32
此外,如果您计划将来迁移到AEM 6.2,请考虑使用ACS共用以方便系统用户的创建和可用性。它消除了所有可能容易出错的手工过程。
https://adobe-consulting-services.github.io/acs-aem-commons/features/ensure-service-users/index.html
https://stackoverflow.com/questions/31350548
复制相似问题