首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ResourceResolverFactory getServiceResourceResolver在AEM6.1中抛出异常

ResourceResolverFactory getServiceResourceResolver在AEM6.1中抛出异常
EN

Stack Overflow用户
提问于 2015-07-10 21:26:58
回答 4查看 18.8K关注 0票数 13

我想将一些数据写入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:

我班上的代码:

代码语言:javascript
复制
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上漏掉了什么吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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

代码语言:javascript
复制
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:在代码中,我添加了额外的参数,如:

代码语言:javascript
复制
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");
}
票数 21
EN

Stack Overflow用户

发布于 2015-07-11 13:12:42

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

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

票数 21
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31350548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档