我想向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)