ResourceResolverFactory getServiceResourceResolver在AEM 6.1中抛出异常

Sur*_*ala 13 sling aem

我想向AEM写一些数据,下面的代码在AEM 6.0中适用于我,但在AEM 6.1中没有,总是抛出一个Login Exception,如下所示:

" 获取服务的CRX用户时出现登录异常:'writeService'.org.apache.sling.api.resource.LoginException:无法派生bundle group.tti.commons-service [395]和子服务writeService的用户名 "

OSGI配置:

在此输入图像描述

我班上的代码:

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) {
...
}
Run Code Online (Sandbox Code Playgroud)

我在AEM 6.1上遗漏了什么?

小智 21

在AEM 6.1中,服务用户必须是系统用户,这实际上意味着他们在JCR中的节点类型为rep:SystemUser.这些用户不能仅用于后台进程来正常登录.管理员用户不是系统用户,因此您无法在此类服务用户映射中使用admin用户.您必须创建一个新的系统用户并为其分配适当的权限.

如果您想了解有关此更改的更多背景信息,请查看https://issues.apache.org/jira/browse/SLING-3854.


Sur*_*ala 21

根据贾斯汀的建议,我尝试并找到了解决方案.发布这样可以对其他人有益.

目标:在用户登录时将数据/节点写入内容(特别是/ etc/userdata).

我们可以通过两种方式实现这一点(无论哪种方式,用户都需要成为'系统用户')

过程1:

步骤1:在OSGI配置中使用内置系统用户.在OSGI中选择Apache Sling Service用户映射器服务

group.abc.commons-service:writeService = oauthservice(其中'oauthservice'是系统用户)

步骤2:为该系统用户分配访问内容文件夹的权限.

在此输入图像描述

您可以在CRX中看到系统用户:/ home/users/system

过程2:

第1步:创建一个新的系统用户.去做这个

打开http:// localhost:4502/crx/explorer/index.jsp

以管理员身份登录>打开'用户管理>选择'创建系统用户'>输入"用户ID">点击绿色按钮(你不会看到保存按钮:)

我创建了"abcwriteservice"用户

第2步:转到权限,并为用户'abcwriteservice'授予权限以访问您要写入的文件夹.(在此示例中:/ etc/userdata) 在此输入图像描述

步骤3:打开OSGI控制台并转到"Apache Sling Service用户映射器服务"以定义服务用户映射.例如:'group.commons-service:writeService = abcwriteservice'

在此输入图像描述

第4步:在代码中,我添加了额外的参数,如:

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 :)`
Run Code Online (Sandbox Code Playgroud)